/src/keystone/llvm/keystone/EVMMapping.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | /* Capstone Disassembly Engine */ |
2 | | /* By Nguyen Anh Quynh, 2018 */ |
3 | | |
4 | | #include <string.h> |
5 | | |
6 | | #include "EVMMapping.h" |
7 | | #include "evm.h" |
8 | | |
9 | 0 | #define ARR_SIZE(a) (sizeof(a)/sizeof(a[0])) |
10 | | |
11 | | // map id to string |
12 | | typedef struct name_map { |
13 | | unsigned short id; |
14 | | const char *name; |
15 | | } name_map; |
16 | | |
17 | | static name_map insn_name_maps[] = { |
18 | | { EVM_INS_STOP, "stop" }, |
19 | | { EVM_INS_ADD, "add" }, |
20 | | { EVM_INS_MUL, "mul" }, |
21 | | { EVM_INS_SUB, "sub" }, |
22 | | { EVM_INS_DIV, "div" }, |
23 | | { EVM_INS_SDIV, "sdiv" }, |
24 | | { EVM_INS_MOD, "mod" }, |
25 | | { EVM_INS_SMOD, "smod" }, |
26 | | { EVM_INS_ADDMOD, "addmod" }, |
27 | | { EVM_INS_MULMOD, "mulmod" }, |
28 | | { EVM_INS_EXP, "exp" }, |
29 | | { EVM_INS_SIGNEXTEND, "signextend" }, |
30 | | { EVM_INS_INVALID, NULL }, |
31 | | { EVM_INS_INVALID, NULL }, |
32 | | { EVM_INS_INVALID, NULL }, |
33 | | { EVM_INS_INVALID, NULL }, |
34 | | { EVM_INS_LT, "lt" }, |
35 | | { EVM_INS_GT, "gt" }, |
36 | | { EVM_INS_SLT, "slt" }, |
37 | | { EVM_INS_SGT, "sgt" }, |
38 | | { EVM_INS_EQ, "eq" }, |
39 | | { EVM_INS_ISZERO, "iszero" }, |
40 | | { EVM_INS_AND, "and" }, |
41 | | { EVM_INS_OR, "or" }, |
42 | | { EVM_INS_XOR, "xor" }, |
43 | | { EVM_INS_NOT, "not" }, |
44 | | { EVM_INS_BYTE, "byte" }, |
45 | | { EVM_INS_INVALID, NULL }, |
46 | | { EVM_INS_INVALID, NULL }, |
47 | | { EVM_INS_INVALID, NULL }, |
48 | | { EVM_INS_INVALID, NULL }, |
49 | | { EVM_INS_INVALID, NULL }, |
50 | | { EVM_INS_SHA3, "sha3" }, |
51 | | { EVM_INS_INVALID, NULL }, |
52 | | { EVM_INS_INVALID, NULL }, |
53 | | { EVM_INS_INVALID, NULL }, |
54 | | { EVM_INS_INVALID, NULL }, |
55 | | { EVM_INS_INVALID, NULL }, |
56 | | { EVM_INS_INVALID, NULL }, |
57 | | { EVM_INS_INVALID, NULL }, |
58 | | { EVM_INS_INVALID, NULL }, |
59 | | { EVM_INS_INVALID, NULL }, |
60 | | { EVM_INS_INVALID, NULL }, |
61 | | { EVM_INS_INVALID, NULL }, |
62 | | { EVM_INS_INVALID, NULL }, |
63 | | { EVM_INS_INVALID, NULL }, |
64 | | { EVM_INS_INVALID, NULL }, |
65 | | { EVM_INS_INVALID, NULL }, |
66 | | { EVM_INS_ADDRESS, "address" }, |
67 | | { EVM_INS_BALANCE, "balance" }, |
68 | | { EVM_INS_ORIGIN, "origin" }, |
69 | | { EVM_INS_CALLER, "caller" }, |
70 | | { EVM_INS_CALLVALUE, "callvalue" }, |
71 | | { EVM_INS_CALLDATALOAD, "calldataload" }, |
72 | | { EVM_INS_CALLDATASIZE, "calldatasize" }, |
73 | | { EVM_INS_CALLDATACOPY, "calldatacopy" }, |
74 | | { EVM_INS_CODESIZE, "codesize" }, |
75 | | { EVM_INS_CODECOPY, "codecopy" }, |
76 | | { EVM_INS_GASPRICE, "gasprice" }, |
77 | | { EVM_INS_EXTCODESIZE, "extcodesize" }, |
78 | | { EVM_INS_EXTCODECOPY, "extcodecopy" }, |
79 | | { EVM_INS_RETURNDATASIZE, "returndatasize" }, |
80 | | { EVM_INS_RETURNDATACOPY, "returndatacopy" }, |
81 | | { EVM_INS_INVALID, NULL }, |
82 | | { EVM_INS_BLOCKHASH, "blockhash" }, |
83 | | { EVM_INS_COINBASE, "coinbase" }, |
84 | | { EVM_INS_TIMESTAMP, "timestamp" }, |
85 | | { EVM_INS_NUMBER, "number" }, |
86 | | { EVM_INS_DIFFICULTY, "difficulty" }, |
87 | | { EVM_INS_GASLIMIT, "gaslimit" }, |
88 | | { EVM_INS_INVALID, NULL }, |
89 | | { EVM_INS_INVALID, NULL }, |
90 | | { EVM_INS_INVALID, NULL }, |
91 | | { EVM_INS_INVALID, NULL }, |
92 | | { EVM_INS_INVALID, NULL }, |
93 | | { EVM_INS_INVALID, NULL }, |
94 | | { EVM_INS_INVALID, NULL }, |
95 | | { EVM_INS_INVALID, NULL }, |
96 | | { EVM_INS_INVALID, NULL }, |
97 | | { EVM_INS_INVALID, NULL }, |
98 | | { EVM_INS_POP, "pop" }, |
99 | | { EVM_INS_MLOAD, "mload" }, |
100 | | { EVM_INS_MSTORE, "mstore" }, |
101 | | { EVM_INS_MSTORE8, "mstore8" }, |
102 | | { EVM_INS_SLOAD, "sload" }, |
103 | | { EVM_INS_SSTORE, "sstore" }, |
104 | | { EVM_INS_JUMP, "jump" }, |
105 | | { EVM_INS_JUMPI, "jumpi" }, |
106 | | { EVM_INS_PC, "pc" }, |
107 | | { EVM_INS_MSIZE, "msize" }, |
108 | | { EVM_INS_GAS, "gas" }, |
109 | | { EVM_INS_JUMPDEST, "jumpdest" }, |
110 | | { EVM_INS_INVALID, NULL }, |
111 | | { EVM_INS_INVALID, NULL }, |
112 | | { EVM_INS_INVALID, NULL }, |
113 | | { EVM_INS_INVALID, NULL }, |
114 | | { EVM_INS_PUSH1, "push1" }, |
115 | | { EVM_INS_PUSH2, "push2" }, |
116 | | { EVM_INS_PUSH3, "push3" }, |
117 | | { EVM_INS_PUSH4, "push4" }, |
118 | | { EVM_INS_PUSH5, "push5" }, |
119 | | { EVM_INS_PUSH6, "push6" }, |
120 | | { EVM_INS_PUSH7, "push7" }, |
121 | | { EVM_INS_PUSH8, "push8" }, |
122 | | { EVM_INS_PUSH9, "push9" }, |
123 | | { EVM_INS_PUSH10, "push10" }, |
124 | | { EVM_INS_PUSH11, "push11" }, |
125 | | { EVM_INS_PUSH12, "push12" }, |
126 | | { EVM_INS_PUSH13, "push13" }, |
127 | | { EVM_INS_PUSH14, "push14" }, |
128 | | { EVM_INS_PUSH15, "push15" }, |
129 | | { EVM_INS_PUSH16, "push16" }, |
130 | | { EVM_INS_PUSH17, "push17" }, |
131 | | { EVM_INS_PUSH18, "push18" }, |
132 | | { EVM_INS_PUSH19, "push19" }, |
133 | | { EVM_INS_PUSH20, "push20" }, |
134 | | { EVM_INS_PUSH21, "push21" }, |
135 | | { EVM_INS_PUSH22, "push22" }, |
136 | | { EVM_INS_PUSH23, "push23" }, |
137 | | { EVM_INS_PUSH24, "push24" }, |
138 | | { EVM_INS_PUSH25, "push25" }, |
139 | | { EVM_INS_PUSH26, "push26" }, |
140 | | { EVM_INS_PUSH27, "push27" }, |
141 | | { EVM_INS_PUSH28, "push28" }, |
142 | | { EVM_INS_PUSH29, "push29" }, |
143 | | { EVM_INS_PUSH30, "push30" }, |
144 | | { EVM_INS_PUSH31, "push31" }, |
145 | | { EVM_INS_PUSH32, "push32" }, |
146 | | { EVM_INS_DUP1, "dup1" }, |
147 | | { EVM_INS_DUP2, "dup2" }, |
148 | | { EVM_INS_DUP3, "dup3" }, |
149 | | { EVM_INS_DUP4, "dup4" }, |
150 | | { EVM_INS_DUP5, "dup5" }, |
151 | | { EVM_INS_DUP6, "dup6" }, |
152 | | { EVM_INS_DUP7, "dup7" }, |
153 | | { EVM_INS_DUP8, "dup8" }, |
154 | | { EVM_INS_DUP9, "dup9" }, |
155 | | { EVM_INS_DUP10, "dup10" }, |
156 | | { EVM_INS_DUP11, "dup11" }, |
157 | | { EVM_INS_DUP12, "dup12" }, |
158 | | { EVM_INS_DUP13, "dup13" }, |
159 | | { EVM_INS_DUP14, "dup14" }, |
160 | | { EVM_INS_DUP15, "dup15" }, |
161 | | { EVM_INS_DUP16, "dup16" }, |
162 | | { EVM_INS_SWAP1, "swap1" }, |
163 | | { EVM_INS_SWAP2, "swap2" }, |
164 | | { EVM_INS_SWAP3, "swap3" }, |
165 | | { EVM_INS_SWAP4, "swap4" }, |
166 | | { EVM_INS_SWAP5, "swap5" }, |
167 | | { EVM_INS_SWAP6, "swap6" }, |
168 | | { EVM_INS_SWAP7, "swap7" }, |
169 | | { EVM_INS_SWAP8, "swap8" }, |
170 | | { EVM_INS_SWAP9, "swap9" }, |
171 | | { EVM_INS_SWAP10, "swap10" }, |
172 | | { EVM_INS_SWAP11, "swap11" }, |
173 | | { EVM_INS_SWAP12, "swap12" }, |
174 | | { EVM_INS_SWAP13, "swap13" }, |
175 | | { EVM_INS_SWAP14, "swap14" }, |
176 | | { EVM_INS_SWAP15, "swap15" }, |
177 | | { EVM_INS_SWAP16, "swap16" }, |
178 | | { EVM_INS_LOG0, "log0" }, |
179 | | { EVM_INS_LOG1, "log1" }, |
180 | | { EVM_INS_LOG2, "log2" }, |
181 | | { EVM_INS_LOG3, "log3" }, |
182 | | { EVM_INS_LOG4, "log4" }, |
183 | | { EVM_INS_INVALID, NULL }, |
184 | | { EVM_INS_INVALID, NULL }, |
185 | | { EVM_INS_INVALID, NULL }, |
186 | | { EVM_INS_INVALID, NULL }, |
187 | | { EVM_INS_INVALID, NULL }, |
188 | | { EVM_INS_INVALID, NULL }, |
189 | | { EVM_INS_INVALID, NULL }, |
190 | | { EVM_INS_INVALID, NULL }, |
191 | | { EVM_INS_INVALID, NULL }, |
192 | | { EVM_INS_INVALID, NULL }, |
193 | | { EVM_INS_INVALID, NULL }, |
194 | | { EVM_INS_INVALID, NULL }, |
195 | | { EVM_INS_INVALID, NULL }, |
196 | | { EVM_INS_INVALID, NULL }, |
197 | | { EVM_INS_INVALID, NULL }, |
198 | | { EVM_INS_INVALID, NULL }, |
199 | | { EVM_INS_INVALID, NULL }, |
200 | | { EVM_INS_INVALID, NULL }, |
201 | | { EVM_INS_INVALID, NULL }, |
202 | | { EVM_INS_INVALID, NULL }, |
203 | | { EVM_INS_INVALID, NULL }, |
204 | | { EVM_INS_INVALID, NULL }, |
205 | | { EVM_INS_INVALID, NULL }, |
206 | | { EVM_INS_INVALID, NULL }, |
207 | | { EVM_INS_INVALID, NULL }, |
208 | | { EVM_INS_INVALID, NULL }, |
209 | | { EVM_INS_INVALID, NULL }, |
210 | | { EVM_INS_INVALID, NULL }, |
211 | | { EVM_INS_INVALID, NULL }, |
212 | | { EVM_INS_INVALID, NULL }, |
213 | | { EVM_INS_INVALID, NULL }, |
214 | | { EVM_INS_INVALID, NULL }, |
215 | | { EVM_INS_INVALID, NULL }, |
216 | | { EVM_INS_INVALID, NULL }, |
217 | | { EVM_INS_INVALID, NULL }, |
218 | | { EVM_INS_INVALID, NULL }, |
219 | | { EVM_INS_INVALID, NULL }, |
220 | | { EVM_INS_INVALID, NULL }, |
221 | | { EVM_INS_INVALID, NULL }, |
222 | | { EVM_INS_INVALID, NULL }, |
223 | | { EVM_INS_INVALID, NULL }, |
224 | | { EVM_INS_INVALID, NULL }, |
225 | | { EVM_INS_INVALID, NULL }, |
226 | | { EVM_INS_INVALID, NULL }, |
227 | | { EVM_INS_INVALID, NULL }, |
228 | | { EVM_INS_INVALID, NULL }, |
229 | | { EVM_INS_INVALID, NULL }, |
230 | | { EVM_INS_INVALID, NULL }, |
231 | | { EVM_INS_INVALID, NULL }, |
232 | | { EVM_INS_INVALID, NULL }, |
233 | | { EVM_INS_INVALID, NULL }, |
234 | | { EVM_INS_INVALID, NULL }, |
235 | | { EVM_INS_INVALID, NULL }, |
236 | | { EVM_INS_INVALID, NULL }, |
237 | | { EVM_INS_INVALID, NULL }, |
238 | | { EVM_INS_INVALID, NULL }, |
239 | | { EVM_INS_INVALID, NULL }, |
240 | | { EVM_INS_INVALID, NULL }, |
241 | | { EVM_INS_INVALID, NULL }, |
242 | | { EVM_INS_INVALID, NULL }, |
243 | | { EVM_INS_INVALID, NULL }, |
244 | | { EVM_INS_INVALID, NULL }, |
245 | | { EVM_INS_INVALID, NULL }, |
246 | | { EVM_INS_INVALID, NULL }, |
247 | | { EVM_INS_INVALID, NULL }, |
248 | | { EVM_INS_INVALID, NULL }, |
249 | | { EVM_INS_INVALID, NULL }, |
250 | | { EVM_INS_INVALID, NULL }, |
251 | | { EVM_INS_INVALID, NULL }, |
252 | | { EVM_INS_INVALID, NULL }, |
253 | | { EVM_INS_INVALID, NULL }, |
254 | | { EVM_INS_INVALID, NULL }, |
255 | | { EVM_INS_INVALID, NULL }, |
256 | | { EVM_INS_INVALID, NULL }, |
257 | | { EVM_INS_INVALID, NULL }, |
258 | | { EVM_INS_CREATE, "create" }, |
259 | | { EVM_INS_CALL, "call" }, |
260 | | { EVM_INS_CALLCODE, "callcode" }, |
261 | | { EVM_INS_RETURN, "return" }, |
262 | | { EVM_INS_DELEGATECALL, "delegatecall" }, |
263 | | { EVM_INS_CALLBLACKBOX, "callblackbox" }, |
264 | | { EVM_INS_INVALID, NULL }, |
265 | | { EVM_INS_INVALID, NULL }, |
266 | | { EVM_INS_INVALID, NULL }, |
267 | | { EVM_INS_INVALID, NULL }, |
268 | | { EVM_INS_STATICCALL, "staticcall" }, |
269 | | { EVM_INS_INVALID, NULL }, |
270 | | { EVM_INS_INVALID, NULL }, |
271 | | { EVM_INS_REVERT, "revert" }, |
272 | | { EVM_INS_INVALID, NULL }, |
273 | | { EVM_INS_SUICIDE, "suicide" }, |
274 | | }; |
275 | | |
276 | | #if defined(_WIN32) || defined(_WIN64) |
277 | | #define strcasecmp _stricmp |
278 | | #endif |
279 | | |
280 | | #include <stdio.h> |
281 | | |
282 | | // find opcode of this mnemonic, or return -1 on failure |
283 | | unsigned short EVM_opcode(const char *mnemonic) |
284 | 0 | { |
285 | 0 | unsigned int i; |
286 | |
|
287 | 0 | for(i = 0; i < ARR_SIZE(insn_name_maps); i++) { |
288 | 0 | if (insn_name_maps[i].name && !strcasecmp(insn_name_maps[i].name, mnemonic)) { |
289 | 0 | return (unsigned short)insn_name_maps[i].id; |
290 | 0 | } |
291 | 0 | } |
292 | | |
293 | 0 | return (unsigned short)-1; |
294 | 0 | } |