Files
idapython-src/tools/patch_directors_cc.py
2025-03-13 16:17:53 +01:00

119 lines
3.2 KiB
Python

from __future__ import print_function
from argparse import ArgumentParser
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",
# range_visitor_t
"virtual int idaapi visit_range",
# 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",
# predicate_t
"virtual bool idaapi should_display",
# graph_visitor_t
"virtual int idaapi visit_node",
"virtual int idaapi visit_edge",
# graph_node_visitor_t
"virtual int idaapi visit_node",
"virtual bool idaapi is_forbidden_edge",
# graph_path_visitor_t
"virtual int idaapi walk_forward",
"virtual int idaapi walk_backward",
# interactive_graph_t
"virtual rect_t &idaapi nrect",
"virtual edge_info_t *idaapi get_edge",
"virtual drawable_graph_t *idaapi clone",
"virtual bool idaapi set_nrect",
"virtual bool idaapi set_edge",
"virtual int idaapi add_node",
"virtual ssize_t idaapi del_node",
"virtual bool idaapi add_edge",
"virtual bool idaapi del_edge",
"virtual bool idaapi replace_edge",
"virtual bool idaapi refresh",
"virtual interactive_graph_t *idaapi clone",
"virtual bool idaapi redo_layout",
"virtual void idaapi resize",
"virtual ea_t idaapi calc_group_ea",
"virtual bool idaapi is_user_graph",
# codegen_t
"virtual mreg_t idaapi load_operand",
"virtual merror_t idaapi analyze_prolog",
"virtual merror_t idaapi gen_micro",
"virtual minsn_t *idaapi emit_micro_mvm",
]
outlines = []
with open(args.file) 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(mode="w", delete=False)
temp.write("".join(outlines))
temp.close()
import shutil
shutil.move(temp.name, args.file)