Miasm2
 All Classes Namespaces Files Functions Variables Typedefs Properties Macros
regs.py
Go to the documentation of this file.
1 from miasm2.expression.expression import ExprId
2 from miasm2.core.cpu import reg_info
3 
4 
5 IP = ExprId('IP', 16)
6 EIP = ExprId('EIP', 32)
7 RIP = ExprId('RIP', 64)
8 exception_flags = ExprId('exception_flags', 32)
9 
10 # GP
11 
12 
13 regs08_str = ["AL", "CL", "DL", "BL", "AH", "CH", "DH", "BH"] + \
14  ["R%dB" % (i + 8) for i in xrange(8)]
15 regs08_expr = [ExprId(x, 8) for x in regs08_str]
16 
17 regs08_64_str = ["AL", "CL", "DL", "BL", "SPL", "BPL", "SIL", "DIL"] + \
18  ["R%dB" % (i + 8) for i in xrange(8)]
19 regs08_64_expr = [ExprId(x, 8) for x in regs08_64_str]
20 
21 
22 regs16_str = ["AX", "CX", "DX", "BX", "SP", "BP", "SI", "DI"] + \
23  ["R%dW" % (i + 8) for i in xrange(8)]
24 regs16_expr = [ExprId(x, 16) for x in regs16_str]
25 
26 regs32_str = ["EAX", "ECX", "EDX", "EBX", "ESP", "EBP", "ESI", "EDI"] + \
27  ["R%dD" % (i + 8) for i in xrange(8)]
28 regs32_expr = [ExprId(x, 32) for x in regs32_str]
29 
30 regs64_str = ["RAX", "RCX", "RDX", "RBX", "RSP", "RBP", "RSI", "RDI",
31  "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15",
32  "RIP"]
33 regs64_expr = [ExprId(x, 64) for x in regs64_str]
34 
35 
36 regs_xmm_str = ["XMM%d" % i for i in xrange(16)]
37 regs_xmm_expr = [ExprId(x, 128) for x in regs_xmm_str]
38 
39 regs_mm_str = ["MM%d" % i for i in xrange(16)]
40 regs_mm_expr = [ExprId(x, 64) for x in regs_mm_str]
41 
42 
43 gpregs08 = reg_info(regs08_str, regs08_expr)
44 gpregs08_64 = reg_info(regs08_64_str, regs08_64_expr)
45 gpregs16 = reg_info(regs16_str, regs16_expr)
46 gpregs32 = reg_info(regs32_str, regs32_expr)
47 gpregs64 = reg_info(regs64_str, regs64_expr)
48 
49 gpregs_xmm = reg_info(regs_xmm_str, regs_xmm_expr)
50 gpregs_mm = reg_info(regs_mm_str, regs_mm_expr)
51 
52 r08_eax = reg_info([regs08_str[0]], [regs08_expr[0]])
53 r16_eax = reg_info([regs16_str[0]], [regs16_expr[0]])
54 r32_eax = reg_info([regs32_str[0]], [regs32_expr[0]])
55 r64_eax = reg_info([regs64_str[0]], [regs64_expr[0]])
56 
57 r08_ecx = reg_info([regs08_str[1]], [regs08_expr[1]])
58 
59 r_eax_all = reg_info(
60  [regs08_str[0], regs16_str[0], regs32_str[0], regs64_str[0]],
61  [regs08_expr[0], regs16_expr[0], regs32_expr[0], regs64_expr[0]])
62 r_edx_all = reg_info(
63  [regs08_str[2], regs16_str[2], regs32_str[2], regs64_str[2]],
64  [regs08_expr[2], regs16_expr[2], regs32_expr[2], regs64_expr[2]])
65 
66 r16_edx = reg_info([regs16_str[2]], [regs16_expr[2]])
67 
68 
69 selectr_str = ["ES", "CS", "SS", "DS", "FS", "GS"]
70 selectr_expr = [ExprId(x, 16) for x in selectr_str]
71 segmreg = reg_info(selectr_str, selectr_expr)
72 
73 crregs32_str = ["CR%d" % i for i in xrange(8)]
74 crregs32_expr = [ExprId(x, 32) for x in crregs32_str]
75 crregs = reg_info(crregs32_str, crregs32_expr)
76 
77 
78 drregs32_str = ["DR%d" % i for i in xrange(8)]
79 drregs32_expr = [ExprId(x, 32) for x in drregs32_str]
80 drregs = reg_info(drregs32_str, drregs32_expr)
81 
82 
83 fltregs32_str = ["ST(%d)" % i for i in xrange(8)]
84 fltregs32_expr = [ExprId(x, 64) for x in fltregs32_str]
85 fltregs = reg_info(fltregs32_str, fltregs32_expr)
86 
87 r_st_all = reg_info(['ST'],
88  [ExprId('ST', 64)])
89 
90 r_cs_all = reg_info(['CS'],
91  [ExprId('CS', 16)])
92 r_ds_all = reg_info(['DS'],
93  [ExprId('DS', 16)])
94 r_es_all = reg_info(['ES'],
95  [ExprId('ES', 16)])
96 r_ss_all = reg_info(['SS'],
97  [ExprId('SS', 16)])
98 r_fs_all = reg_info(['FS'],
99  [ExprId('FS', 16)])
100 r_gs_all = reg_info(['GS'],
101  [ExprId('GS', 16)])
102 
103 
104 AL = regs08_expr[0]
105 CL = regs08_expr[1]
106 DL = regs08_expr[2]
107 BL = regs08_expr[3]
108 AH = regs08_expr[4]
109 CH = regs08_expr[5]
110 DH = regs08_expr[6]
111 BH = regs08_expr[7]
112 R8B = regs08_expr[8]
113 R9B = regs08_expr[9]
114 R10B = regs08_expr[10]
115 R11B = regs08_expr[11]
116 R12B = regs08_expr[12]
117 R13B = regs08_expr[13]
118 R14B = regs08_expr[14]
119 R15B = regs08_expr[15]
120 R15B = regs08_expr[15]
121 
122 SPL = regs08_64_expr[4]
123 BPL = regs08_64_expr[5]
124 SIL = regs08_64_expr[6]
125 DIL = regs08_64_expr[7]
126 
127 
128 AX = regs16_expr[0]
129 CX = regs16_expr[1]
130 DX = regs16_expr[2]
131 BX = regs16_expr[3]
132 SP = regs16_expr[4]
133 BP = regs16_expr[5]
134 SI = regs16_expr[6]
135 DI = regs16_expr[7]
136 R8W = regs16_expr[8]
137 R9W = regs16_expr[9]
138 R10W = regs16_expr[10]
139 R11W = regs16_expr[11]
140 R12W = regs16_expr[12]
141 R13W = regs16_expr[13]
142 R14W = regs16_expr[14]
143 R15W = regs16_expr[15]
144 
145 
146 EAX = regs32_expr[0]
147 ECX = regs32_expr[1]
148 EDX = regs32_expr[2]
149 EBX = regs32_expr[3]
150 ESP = regs32_expr[4]
151 EBP = regs32_expr[5]
152 ESI = regs32_expr[6]
153 EDI = regs32_expr[7]
154 R8D = regs32_expr[8]
155 R9D = regs32_expr[9]
156 R10D = regs32_expr[10]
157 R11D = regs32_expr[11]
158 R12D = regs32_expr[12]
159 R13D = regs32_expr[13]
160 R14D = regs32_expr[14]
161 R15D = regs32_expr[15]
162 
163 
164 RAX = regs64_expr[0]
165 RCX = regs64_expr[1]
166 RDX = regs64_expr[2]
167 RBX = regs64_expr[3]
168 RSP = regs64_expr[4]
169 RBP = regs64_expr[5]
170 RSI = regs64_expr[6]
171 RDI = regs64_expr[7]
172 R8 = regs64_expr[8]
173 R9 = regs64_expr[9]
174 R10 = regs64_expr[10]
175 R11 = regs64_expr[11]
176 R12 = regs64_expr[12]
177 R13 = regs64_expr[13]
178 R14 = regs64_expr[14]
179 R15 = regs64_expr[15]
180 
181 
182 reg_zf = 'zf'
183 reg_nf = 'nf'
184 reg_pf = 'pf'
185 reg_of = 'of'
186 reg_cf = 'cf'
187 reg_tf = 'tf'
188 reg_if = 'i_f'
189 reg_df = 'df'
190 reg_af = 'af'
191 reg_iopl = 'iopl_f'
192 reg_nt = 'nt'
193 reg_rf = 'rf'
194 reg_vm = 'vm'
195 reg_ac = 'ac'
196 reg_vif = 'vif'
197 reg_vip = 'vip'
198 reg_id = 'i_d'
199 
200 
201 reg_es = "ES"
202 reg_cs = "CS"
203 reg_ss = "SS"
204 reg_ds = "DS"
205 reg_fs = "FS"
206 reg_gs = "GS"
207 
208 reg_dr0 = 'DR0'
209 reg_dr1 = 'DR1'
210 reg_dr2 = 'DR2'
211 reg_dr3 = 'DR3'
212 reg_dr4 = 'DR4'
213 reg_dr5 = 'DR5'
214 reg_dr6 = 'DR6'
215 reg_dr7 = 'DR7'
216 
217 reg_cr0 = 'CR0'
218 reg_cr1 = 'CR1'
219 reg_cr2 = 'CR2'
220 reg_cr3 = 'CR3'
221 reg_cr4 = 'CR4'
222 reg_cr5 = 'CR5'
223 reg_cr6 = 'CR6'
224 reg_cr7 = 'CR7'
225 
226 reg_mm0 = 'MM0'
227 reg_mm1 = 'MM1'
228 reg_mm2 = 'MM2'
229 reg_mm3 = 'MM3'
230 reg_mm4 = 'MM4'
231 reg_mm5 = 'MM5'
232 reg_mm6 = 'MM6'
233 reg_mm7 = 'MM7'
234 
235 
236 reg_tsc1 = "tsc1"
237 reg_tsc2 = "tsc2"
238 
239 reg_float_c0 = 'float_c0'
240 reg_float_c1 = 'float_c1'
241 reg_float_c2 = 'float_c2'
242 reg_float_c3 = 'float_c3'
243 reg_float_stack_ptr = "float_stack_ptr"
244 reg_float_control = 'reg_float_control'
245 reg_float_eip = 'reg_float_eip'
246 reg_float_cs = 'reg_float_cs'
247 reg_float_address = 'reg_float_address'
248 reg_float_ds = 'reg_float_ds'
249 
250 
251 dr0 = ExprId(reg_dr0)
252 dr1 = ExprId(reg_dr1)
253 dr2 = ExprId(reg_dr2)
254 dr3 = ExprId(reg_dr3)
255 dr4 = ExprId(reg_dr4)
256 dr5 = ExprId(reg_dr5)
257 dr6 = ExprId(reg_dr6)
258 dr7 = ExprId(reg_dr7)
259 
260 cr0 = ExprId(reg_cr0)
261 cr1 = ExprId(reg_cr1)
262 cr2 = ExprId(reg_cr2)
263 cr3 = ExprId(reg_cr3)
264 cr4 = ExprId(reg_cr4)
265 cr5 = ExprId(reg_cr5)
266 cr6 = ExprId(reg_cr6)
267 cr7 = ExprId(reg_cr7)
268 
269 mm0 = ExprId(reg_mm0, 64)
270 mm1 = ExprId(reg_mm1, 64)
271 mm2 = ExprId(reg_mm2, 64)
272 mm3 = ExprId(reg_mm3, 64)
273 mm4 = ExprId(reg_mm4, 64)
274 mm5 = ExprId(reg_mm5, 64)
275 mm6 = ExprId(reg_mm6, 64)
276 mm7 = ExprId(reg_mm7, 64)
277 
278 XMM0 = regs_xmm_expr[0]
279 XMM1 = regs_xmm_expr[1]
280 XMM2 = regs_xmm_expr[2]
281 XMM3 = regs_xmm_expr[3]
282 XMM4 = regs_xmm_expr[4]
283 XMM5 = regs_xmm_expr[5]
284 XMM6 = regs_xmm_expr[6]
285 XMM7 = regs_xmm_expr[7]
286 XMM8 = regs_xmm_expr[8]
287 XMM9 = regs_xmm_expr[9]
288 XMM10 = regs_xmm_expr[10]
289 XMM11 = regs_xmm_expr[11]
290 XMM12 = regs_xmm_expr[12]
291 XMM13 = regs_xmm_expr[13]
292 XMM14 = regs_xmm_expr[14]
293 XMM15 = regs_xmm_expr[15]
294 
295 # tmp1= ExprId(reg_tmp1)
296 zf = ExprId(reg_zf, size=1)
297 nf = ExprId(reg_nf, size=1)
298 pf = ExprId(reg_pf, size=1)
299 of = ExprId(reg_of, size=1)
300 cf = ExprId(reg_cf, size=1)
301 tf = ExprId(reg_tf, size=1)
302 i_f = ExprId(reg_if, size=1)
303 df = ExprId(reg_df, size=1)
304 af = ExprId(reg_af, size=1)
305 iopl = ExprId(reg_iopl, size=2)
306 nt = ExprId(reg_nt, size=1)
307 rf = ExprId(reg_rf, size=1)
308 vm = ExprId(reg_vm, size=1)
309 ac = ExprId(reg_ac, size=1)
310 vif = ExprId(reg_vif, size=1)
311 vip = ExprId(reg_vip, size=1)
312 i_d = ExprId(reg_id, size=1)
313 
314 ES = ExprId(reg_es, size=16)
315 CS = ExprId(reg_cs, size=16)
316 SS = ExprId(reg_ss, size=16)
317 DS = ExprId(reg_ds, size=16)
318 FS = ExprId(reg_fs, size=16)
319 GS = ExprId(reg_gs, size=16)
320 
321 tsc1 = ExprId(reg_tsc1, size=32)
322 tsc2 = ExprId(reg_tsc2, size=32)
323 
324 float_c0 = ExprId(reg_float_c0, size=1)
325 float_c1 = ExprId(reg_float_c1, size=1)
326 float_c2 = ExprId(reg_float_c2, size=1)
327 float_c3 = ExprId(reg_float_c3, size=1)
328 float_stack_ptr = ExprId(reg_float_stack_ptr, size=3)
329 float_control = ExprId(reg_float_control, 16)
330 float_eip = ExprId(reg_float_eip)
331 float_cs = ExprId(reg_float_cs, size=16)
332 float_address = ExprId(reg_float_address)
333 float_ds = ExprId(reg_float_ds, size=16)
334 
335 float_st0 = ExprId("float_st0", 64)
336 float_st1 = ExprId("float_st1", 64)
337 float_st2 = ExprId("float_st2", 64)
338 float_st3 = ExprId("float_st3", 64)
339 float_st4 = ExprId("float_st4", 64)
340 float_st5 = ExprId("float_st5", 64)
341 float_st6 = ExprId("float_st6", 64)
342 float_st7 = ExprId("float_st7", 64)
343 
344 
345 float_list = [float_st0, float_st1, float_st2, float_st3,
346  float_st4, float_st5, float_st6, float_st7]
347 
348 float_replace = {fltregs32_expr[i]: float_list[i] for i in xrange(8)}
349 float_replace[r_st_all.expr[0]] = float_st0
350 
351 
352 EAX_init = ExprId('EAX_init')
353 EBX_init = ExprId('EBX_init')
354 ECX_init = ExprId('ECX_init')
355 EDX_init = ExprId('EDX_init')
356 ESI_init = ExprId('ESI_init')
357 EDI_init = ExprId('EDI_init')
358 ESP_init = ExprId('ESP_init')
359 EBP_init = ExprId('EBP_init')
360 
361 
362 RAX_init = ExprId('RAX_init', 64)
363 RBX_init = ExprId('RBX_init', 64)
364 RCX_init = ExprId('RCX_init', 64)
365 RDX_init = ExprId('RDX_init', 64)
366 RSI_init = ExprId('RSI_init', 64)
367 RDI_init = ExprId('RDI_init', 64)
368 RSP_init = ExprId('RSP_init', 64)
369 RBP_init = ExprId('RBP_init', 64)
370 
371 
372 all_regs_ids = [
373  AL, CL, DL, BL, AH, CH, DH, BH,
374  R8B, R9B, R10B, R11B, R12B, R13B, R14B, R15B, R15B,
375  SPL, BPL, SIL, DIL,
376  AX, CX, DX, BX, SP, BP, SI, DI,
377  R8W, R9W, R10W, R11W, R12W, R13W, R14W, R15W,
378  IP,
379  EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI,
380  R8D, R9D, R10D, R11D, R12D, R13D, R14D, R15D,
381  EIP,
382 
383  RAX, RBX, RCX, RDX, RSP, RBP, RIP, RSI, RDI,
384  R8, R9, R10, R11, R12, R13, R14, R15, R15,
385  zf, nf, pf, of, cf, af, df,
386  tf, i_f, iopl, nt, rf, vm, ac, vif, vip, i_d,
387  float_control, float_eip, float_cs, float_address, float_ds,
388  tsc1, tsc2,
389  ES, CS, SS, DS, FS, GS,
390  float_st0, float_st1, float_st2, float_st3,
391  float_st4, float_st5, float_st6, float_st7,
392  float_c0, float_c1, float_c2, float_c3,
393  cr0, cr3,
394  dr0, dr1, dr2, dr3, dr4, dr5, dr6, dr7,
395  float_stack_ptr,
396  mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7,
397 
398  XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7,
399  XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15,
400 
401 
402  exception_flags,
403 ] + fltregs32_expr
404 
405 all_regs_ids_no_alias = [
406  RAX, RBX, RCX, RDX, RSP, RBP, RIP, RSI, RDI,
407  R8, R9, R10, R11, R12, R13, R14, R15, R15,
408  zf, nf, pf, of, cf, af, df,
409  tf, i_f, iopl, nt, rf, vm, ac, vif, vip, i_d,
410  float_control, float_eip, float_cs, float_address, float_ds,
411  tsc1, tsc2,
412  ES, CS, SS, DS, FS, GS,
413  float_st0, float_st1, float_st2, float_st3,
414  float_st4, float_st5, float_st6, float_st7,
415  float_c0, float_c1, float_c2, float_c3,
416  cr0, cr3,
417  dr0, dr1, dr2, dr3, dr4, dr5, dr6, dr7,
418  float_stack_ptr,
419  mm0, mm1, mm2, mm3, mm4, mm5, mm6, mm7,
420  XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7,
421  XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15,
422 
423 
424  exception_flags,
425 ] + fltregs32_expr
426 
427 all_regs_ids_byname = dict([(x.name, x) for x in all_regs_ids])
428 
429 all_regs_ids_init = [ExprId("%s_init" % x.name, x.size) for x in all_regs_ids]
430 
431 regs_init = {}
432 for i, r in enumerate(all_regs_ids):
433  all_regs_ids_init[i].is_term = True
434  regs_init[r] = all_regs_ids_init[i]
435 
436 regs_flt_expr = [float_st0, float_st1, float_st2, float_st3,
437  float_st4, float_st5, float_st6, float_st7,
438  ]
439 
440 mRAX = {16: AX, 32: EAX, 64: RAX}
441 mRBX = {16: BX, 32: EBX, 64: RBX}
442 mRCX = {16: CX, 32: ECX, 64: RCX}
443 mRDX = {16: DX, 32: EDX, 64: RDX}
444 mRSI = {16: SI, 32: ESI, 64: RSI}
445 mRDI = {16: DI, 32: EDI, 64: RDI}
446 mRBP = {16: BP, 32: EBP, 64: RBP}
447 mRSP = {16: SP, 32: ESP, 64: RSP}
448 mRIP = {16: IP, 32: EIP, 64: RIP}