This repository was archived by the owner on Dec 24, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 298
Expand file tree
/
Copy pathpatch_directors_cc.py
More file actions
118 lines (94 loc) · 3.24 KB
/
Copy pathpatch_directors_cc.py
File metadata and controls
118 lines (94 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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)