|
85 | 85 | arg = { |
86 | 86 | 0x02: 8, |
87 | 87 | 0x0A: 8, |
| 88 | + 0x12: 8, |
88 | 89 | 0x91: 8, |
89 | 90 | 0x93: 8, |
90 | 91 | 0x95: 8, |
|
98 | 99 | 0xF9: 1, |
99 | 100 | 0xFA: 1, |
100 | 101 | } |
| 102 | +cp = [] |
101 | 103 |
|
102 | 104 | bytes_read = open(sys.argv[1], "rb").read() |
| 105 | +header_bytes = [] |
| 106 | +main_bytes = [] |
103 | 107 |
|
104 | 108 | def print_byte(i, b, color=RED): |
105 | 109 | b = hex(b).lstrip('0x') |
106 | 110 | while len(b) < 2: |
107 | 111 | b = '0' + b |
108 | 112 | b = color + ' ' + b + END |
109 | 113 | if i % 16 == 15: |
110 | | - print(b) |
| 114 | + return b + '\n' |
111 | 115 | 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 + ' ' |
113 | 127 |
|
114 | 128 | def process_byte(i, b): |
115 | 129 | if b in bc: |
116 | 130 | b = YEL + bc[b] + END |
117 | 131 | if i % 16 == 15: |
| 132 | + return b + '\n' |
118 | 133 | print(b) |
119 | 134 | else: |
120 | | - print(b, end=' ') |
| 135 | + return b + ' ' |
121 | 136 | else: |
122 | 137 | print("error") |
| 138 | + print(hex(b)) |
123 | 139 | sys.exit() |
124 | 140 |
|
125 | 141 | header_len = int.from_bytes(bytes_read[:8], byteorder=sys.byteorder, signed=True) |
126 | 142 |
|
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 = [] |
134 | 147 | i = header_len |
135 | 148 | 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])) |
137 | 154 | for j in range(arg.get(bytes_read[i], 0)): |
138 | 155 | i += 1 |
139 | | - print_byte(i - header_len, bytes_read[i]) |
| 156 | + main_bytes.append(print_byte(i - header_len, bytes_read[i])) |
140 | 157 | i += 1 |
141 | 158 |
|
| 159 | +header_bytes = [] |
| 160 | +for i in range(16): |
| 161 | + header_bytes.append(print_byte(i, bytes_read[i], color=MAG)) |
142 | 162 |
|
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