-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprocessrom_abs.py
More file actions
94 lines (89 loc) · 2.38 KB
/
processrom_abs.py
File metadata and controls
94 lines (89 loc) · 2.38 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
import idc
import idaapi
def processrom(min, max):
if min > 0:
min = min - 1
curaddr = idc.find_unknown(min, idc.SEARCH_DOWN)
while curaddr < max:
if idc.add_func(curaddr) != True:
idc.create_insn(curaddr)
curaddr = idc.find_unknown(curaddr, idc.SEARCH_DOWN)
return
def makedata(min, max, flags, size, tid):
curaddr = min
while curaddr < max:
idc.del_items(curaddr, size, idaapi.DELIT_SIMPLE)
idc.create_data(curaddr, flags, size, tid)
curaddr += size
return
def a2l(filename):
lastvarname = ""
lastaddress = ""
with open(filename) as fp:
f = fp.read()
measurements = f.split("/begin MEASUREMENT")
measurements.pop(0)
print("Found: %d measurement(s)" % len(measurements))
for m in measurements:
namefound = 0
addrfound = 0
name = ""
addr = ""
is_enum = False
bit_mask = 0
for l in m.split("\n"):
l = l.strip()
if (len(l) > 0):
if (namefound == 0):
name = l
namefound = 1
elif (l.startswith("BIT_MASK")):
is_enum = True
bit_mask = int(l.split(" ")[1], 16)
elif (l.startswith("ECU_ADDRESS")):
addr = l[12:]
addrfound = 1
break
if (addrfound != 1):
print("ERROR")
elif (is_enum):
enum_name = "enum_" + addr[2:]
enum_id = idc.get_enum(enum_name)
if (enum_id == 4294967295):
enum_id = idc.add_enum(-1, enum_name, 0)
idc.op_enum(int(addr, 0), -1, enum_id, 0)
idc.set_name(int(addr, 0), "", 0)
if (not idc.is_bf(enum_id)):
idc.set_enum_bf(enum_id, 1)
idc.add_enum_member(enum_id, name, bit_mask, bit_mask)
else:
idc.del_items(int(addr, 0), 1, idaapi.DELIT_SIMPLE)
idc.set_name(int(addr, 0), name, 1)
characteristics = f.split("/begin CHARACTERISTIC")
characteristics.pop(0)
print("Found: %d characteristics(s)" % len(characteristics))
for m in characteristics:
namefound = 0
addrfound = 0
name = ""
addr = ""
is_enum = False
bit_mask = 0
for l in m.split("\n"):
l = l.strip()
if (len(l) > 0):
if (namefound == 0):
name = l
namefound = 1
elif (l.startswith("0x1C")):
addr = l
print(addr)
addrfound = 1
break
if (addrfound != 1):
print("ERROR", name)
else:
print("addr", addr)
idc.del_items(int(addr, 0), 1, idaapi.DELIT_SIMPLE)
idc.set_name(int(addr, 0), name, 1)
return