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