mirror of
https://github.com/idapython/src
synced 2026-06-08 14:47:00 +00:00
83 lines
2.2 KiB
Python
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)
|