blob: 10c49b9b12a04f96bacc5bedea4895cf0f7e9905 [file] [log] [blame]
#!/usr/bin/env python
"""
eBPF disassembler
Reads the given file or stdin. The input should be raw eBPF
instructions (not an ELF object file).
"""
import argparse
import os
import sys
ROOT_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "..")
if os.path.exists(os.path.join(ROOT_DIR, "ubpf")):
# Running from source tree
sys.path.insert(0, ROOT_DIR)
import ubpf.disassembler
def main():
parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('input', type=argparse.FileType('rb'), default='-', nargs='?')
parser.add_argument('output', type=argparse.FileType('w'), default='-', nargs='?')
args = parser.parse_args()
if args.input.name == "<stdin>" and hasattr(args.input, "buffer"):
# python 3
input_ = args.input.buffer.read()
else:
input_ = args.input.read()
args.output.write(ubpf.disassembler.disassemble(input_))
if __name__ == "__main__":
main()