Files
idapython-src/patch_directors_cc.py
T
2016-01-08 11:59:48 +01:00

81 lines
2.3 KiB
Python

import os, shutil, sys, optparse
if __name__ == "__main__":
p = optparse.OptionParser(description='Patch calling conventions for some functions, so it builds on windows')
p.add_option('-v', "--verbose", dest="verbose", action="store_true")
p.add_option('-f', "--file", dest="path", type="string", help="File name, without extension.")
opts, _ = p.parse_args(sys.argv[1:])
if not opts.path:
p.print_help()
sys.exit(1)
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",
]
path = opts.path
outlines = []
outpath = "%s.cc" % path
with open(path, "r") 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)
with open(outpath, "w") as f:
f.writelines(outlines)
shutil.move(outpath, path)