| #!/usr/bin/python |
| # convert LLVM GenDisassemblerTables.inc for Capstone disassembler. |
| # this just adds a header |
| # by Nguyen Anh Quynh, 2019 |
| |
| import sys |
| |
| if len(sys.argv) == 1: |
| print("Syntax: %s <GenDisassemblerTables.inc> <X86GenDisassemblerTables.inc> <X86GenDisassemblerTables2.inc>" %sys.argv[0]) |
| sys.exit(1) |
| |
| f = open(sys.argv[1]) |
| lines = f.readlines() |
| f.close() |
| |
| f1 = open(sys.argv[2], 'w+') |
| |
| f2 = open(sys.argv[3], 'w+') |
| |
| f1.write("/* Capstone Disassembly Engine, http://www.capstone-engine.org */\n") |
| f1.write("/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2019 */\n") |
| f1.write("\n") |
| |
| f2.write("/* Capstone Disassembly Engine, http://www.capstone-engine.org */\n") |
| f2.write("/* By Nguyen Anh Quynh <aquynh@gmail.com>, 2013-2019 */\n") |
| f2.write("\n") |
| |
| # static const struct ContextDecision x86DisassemblerOneByteOpcodes = { |
| |
| # static const struct ContextDecision x86DisassemblerXOP8Opcodes = { |
| |
| write_to_f2 = False |
| |
| for line in lines: |
| # ignore all tables from XOP onwards |
| if 'ContextDecision x86DisassemblerXOP8Opcodes = {' in line: |
| # done |
| break |
| |
| if 'ContextDecision x86DisassemblerOneByteOpcodes = {' in line: |
| # done with f1, start writing to f2 |
| write_to_f2 = True |
| |
| if write_to_f2: |
| f2.write(line) |
| else: |
| f1.write(line) |
| |
| f1.close() |
| f2.close() |