Skip to content
This repository was archived by the owner on Jan 1, 2021. It is now read-only.

Commit cebc97c

Browse files
updated for better string support
1 parent 6984b31 commit cebc97c

File tree

1 file changed

+55
-13
lines changed

1 file changed

+55
-13
lines changed

disassembler.py

Lines changed: 55 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
arg = {
8686
0x02: 8,
8787
0x0A: 8,
88+
0x12: 8,
8889
0x91: 8,
8990
0x93: 8,
9091
0x95: 8,
@@ -98,46 +99,87 @@
9899
0xF9: 1,
99100
0xFA: 1,
100101
}
102+
cp = []
101103

102104
bytes_read = open(sys.argv[1], "rb").read()
105+
header_bytes = []
106+
main_bytes = []
103107

104108
def print_byte(i, b, color=RED):
105109
b = hex(b).lstrip('0x')
106110
while len(b) < 2:
107111
b = '0' + b
108112
b = color + ' ' + b + END
109113
if i % 16 == 15:
110-
print(b)
114+
return b + '\n'
111115
else:
112-
print(b, end=' ')
116+
return b + ' '
117+
118+
def print_char(i, b, color=GRN):
119+
b = "'" + chr(b) + "'"
120+
while len(b) < 4:
121+
b = ' ' + b
122+
b = color + b + END
123+
if i % 16 == 15:
124+
return b + '\n'
125+
else:
126+
return b + ' '
113127

114128
def process_byte(i, b):
115129
if b in bc:
116130
b = YEL + bc[b] + END
117131
if i % 16 == 15:
132+
return b + '\n'
118133
print(b)
119134
else:
120-
print(b, end=' ')
135+
return b + ' '
121136
else:
122137
print("error")
138+
print(hex(b))
123139
sys.exit()
124140

125141
header_len = int.from_bytes(bytes_read[:8], byteorder=sys.byteorder, signed=True)
126142

127-
print("header")
128-
for i in range(16):
129-
print_byte(i, bytes_read[i], color=MAG)
130-
for i in range(16, header_len):
131-
print_byte(i, bytes_read[i], color=GRN)
132-
133-
print("\nentry point")
143+
144+
main_bytes = []
145+
fns = []
146+
strs = []
134147
i = header_len
135148
while i < len(bytes_read):
136-
process_byte(i - header_len, bytes_read[i])
149+
if bytes_read[i] == 0x12:
150+
fns.append(int.from_bytes(bytes_read[i+1:i+9], byteorder=sys.byteorder,signed=True))
151+
if bytes_read[i] == 0xBB:
152+
strs.append(int.from_bytes(bytes_read[i+1:i+9], byteorder=sys.byteorder,signed=True))
153+
main_bytes.append(process_byte(i - header_len, bytes_read[i]))
137154
for j in range(arg.get(bytes_read[i], 0)):
138155
i += 1
139-
print_byte(i - header_len, bytes_read[i])
156+
main_bytes.append(print_byte(i - header_len, bytes_read[i]))
140157
i += 1
141158

159+
header_bytes = []
160+
for i in range(16):
161+
header_bytes.append(print_byte(i, bytes_read[i], color=MAG))
142162

143-
print('\nend of bytecode')
163+
i = 16
164+
while i < header_len:
165+
if i in strs:
166+
str_len = int.from_bytes(bytes_read[i:i+8], byteorder=sys.byteorder,signed=True)
167+
for j in range(8):
168+
header_bytes.append(print_byte(i, bytes_read[i], color=GRN))
169+
i += 1
170+
for j in range(str_len):
171+
header_bytes.append(print_char(i, bytes_read[i]))
172+
i += 1
173+
elif i in fns:
174+
print(hex(i))
175+
header_bytes.append(print_byte(i, bytes_read[i], color=RED))
176+
i += 1
177+
else:
178+
header_bytes.append(print_byte(i, bytes_read[i], color=RED))
179+
i += 1
180+
181+
print("header")
182+
print(''.join(header_bytes))
183+
print("entry point")
184+
print(''.join(main_bytes))
185+
print('end of bytecode')

0 commit comments

Comments
 (0)