Files
idapython-src/tools/patch_directors_cc.py
T
2016-08-09 10:01:18 +02:00

83 lines
2.2 KiB
Python

try:
from argparse import ArgumentParser
except:
print "Failed to import module 'argparse'. Upgrade to Python 2.7, copy argparse.py to this directory or try 'apt-get install python-argparse'"
raise
parser = ArgumentParser(description='Patch calling conventions for some functions, so it builds on windows')
parser.add_argument("-f", "--file", required=True)
parser.add_argument("-v", "--verbose", default=False, action="store_true")
args = parser.parse_args()
patches = [
# text_sink_t
"virtual int idaapi print",
# user_lvar_modifier_t
"virtual bool idaapi modify_lvars",
# ctree_visitor_t
"virtual int idaapi visit_insn",
"virtual int idaapi visit_expr",
"virtual int idaapi leave_insn",
"virtual int idaapi leave_expr",
# ctree_parentee_t
"virtual int idaapi visit_insn",
"virtual int idaapi visit_expr",
"virtual int idaapi leave_insn",
"virtual int idaapi leave_expr",
# cfunc_parentee_t
"virtual int idaapi visit_insn",
"virtual int idaapi visit_expr",
"virtual int idaapi leave_insn",
"virtual int idaapi leave_expr",
# enum_member_visitor_t
"virtual int idaapi visit_enum_member",
# struct_field_visitor_t
"virtual int idaapi visit_field",
# tinfo_visitor_t
"virtual int idaapi visit_type",
# aloc_visitor_t
"virtual int idaapi visit_location",
# const_aloc_visitor_t
"virtual int idaapi visit_location",
# area_visitor2_t
"virtual int idaapi visit_area",
# highlighter_cbs_t
"virtual void idaapi set_style",
"virtual int32 idaapi prev_block_state",
"virtual int32 idaapi cur_block_state",
"virtual void idaapi set_block_state",
]
outlines = []
with open(args.file, "rb") as f:
lines = f.readlines()
for line in lines:
for patch in patches:
from_text = patch.replace("idaapi ", "")
if line.find(from_text) > -1:
line = line.replace(from_text, patch)
patches.remove(patch)
break
outlines.append(line)
import tempfile
temp = tempfile.NamedTemporaryFile(delete=False)
temp.writelines(outlines)
temp.close()
import shutil
shutil.move(temp.name, args.file)