PageRenderTime 35ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/ia32/data.py

http://pyemu.googlecode.com/
Python | 696 lines | 693 code | 1 blank | 2 comment | 0 complexity | 1c1572b41cda5181971c328b31469b30 MD5 | raw file
  1. ## ia32 opcode tables - thx to sandpile.org and a little bit of alcohol
  2. ## (that also means that this potentially will contain errors)
  3. opcode_1 = '''
  4. add Eb, Gb
  5. add Ev, Gv
  6. add Gb, Eb
  7. add Gv, Ev
  8. add al, Ib
  9. add rAX, Iz
  10. push es
  11. pop es
  12. or Eb, Gb
  13. or Ev, Gv
  14. or Gb, Eb
  15. or Gv, Ev
  16. or al, Ib
  17. or rAX, Iz
  18. push cs
  19. >opcode_2
  20. # 0x10
  21. adc Eb, Gb
  22. adc Ev, Gv
  23. adc Gb, Eb
  24. adc Gv, Ev
  25. adc al, Ib
  26. adc rAX, Iz
  27. push ss
  28. pop ss
  29. sbb Eb, Gb
  30. sbb Ev,Gv
  31. sbb Gb,Eb
  32. sbb Gv,Ev
  33. sbb al, Ib
  34. sbb rAX,Iz
  35. push ds
  36. pop ds
  37. # 0x20
  38. and Eb,Gb
  39. and Ev,Gv
  40. and Gb,Eb
  41. and Gv,Ev
  42. and al, Ib
  43. and rAx, Iz
  44. es:
  45. daa
  46. isub Eb,Gb
  47. sub Ev,Gv
  48. sub Gb,Eb
  49. sub Gv,Ev
  50. sub al, Ib
  51. sub rAX,Iz
  52. cs:
  53. das
  54. # 0x30
  55. xor Eb,Gb
  56. xor Ev,Gv
  57. xor Gb,Eb
  58. xor Gv,Ev
  59. xor al,Ib
  60. xor rAX,Iz
  61. ss:
  62. aaa
  63. cmp Eb,Gb
  64. cmp Ev,Gv
  65. cmp Gb,Eb
  66. cmp Gv,Ev
  67. cmp al,Ib
  68. cmp rAX,Iz
  69. ds:
  70. aas
  71. # 0x40
  72. inc eAX
  73. inc eCX
  74. inc eDX
  75. inc eBX
  76. inc eSP
  77. inc eBP
  78. inc eSI
  79. inc eDI
  80. dec eAX
  81. dec eCX
  82. dec eDX
  83. dec eBX
  84. dec eSP
  85. dec eBP
  86. dec eSI
  87. dec eDI
  88. # 0x50
  89. push rAX
  90. push rCX
  91. push rDX
  92. push rBX
  93. push rSP
  94. push rBP
  95. push rSI
  96. push rDI
  97. pop rAX
  98. pop rCX
  99. pop rDX
  100. pop rBX
  101. pop rSP
  102. pop rBP
  103. pop rSI
  104. pop rDI
  105. # 0x60
  106. pusha (80186+)
  107. popa (80186+)
  108. bound Gv,Ma (80186+)
  109. arpl Ew,Gw (80286+)
  110. fs: (80386+)
  111. gs: (80387+)
  112. opsize: (80386+)
  113. adsize: (80386+)
  114. push Iz (80186+)
  115. imul Gv,Ev,Iz (80186+)
  116. push Ib (80186+)
  117. imul Gv,Ev,Ib (80186+)
  118. ins Yb, DX (80186+)
  119. ins Yz, DX (80186+)
  120. outs DX, Xb (80186+)
  121. outs DX,Xz (80186+)
  122. # 0x70
  123. jo Jb
  124. jno Jb
  125. jb Jb
  126. jnb Jb
  127. jz Jb
  128. jnz Jb
  129. jbe Jb
  130. jnbe Jb
  131. js Jb
  132. jns Jb
  133. jp Jb
  134. jnp Jb
  135. jl Jb
  136. jnl Jb
  137. jle Jb
  138. jnle Jb
  139. #0x80
  140. group_1 Eb,Ib
  141. group_1 Ev,Iz
  142. group_1 Eb,Ib
  143. group_1 Ev,Ib
  144. test Eb,Gb
  145. test Ev,Gv
  146. xchg Eb,Gb
  147. xchg Ev,Gv
  148. mov Eb, Gb
  149. mov Eb,Gv
  150. mov Gb,Eb
  151. mov Gv,Ev
  152. mov Mw,Sw
  153. lea Gv,M
  154. mov Sw,Mw
  155. group_10
  156. #0x90
  157. nop
  158. xchg rCX,rAX
  159. xchg rDX,rAX
  160. xchg rBX,rAX
  161. xchg rSP,rAX
  162. xchg rBP,rAX
  163. xchg rSI,rAX
  164. xchg rDI, rAX
  165. cbw (8088) cwde (80386+)
  166. cwd (8088) cdq (80386+)
  167. call Ap
  168. wait () fwait ()
  169. pushf Fv
  170. popf fv
  171. sahf
  172. lahf
  173. #0xa0
  174. mov al, Ob
  175. mov rAX, Ov
  176. mov Ob, al
  177. mov Ov, rAX
  178. movs Yb,Xb
  179. movs Yv,Xv
  180. cmps Yb,Xb
  181. cmps Yv,Xv
  182. test al, Ib
  183. test rAX,Iz
  184. stos Yv,al
  185. stos Yv,rAx
  186. lods al, Xb
  187. lods rAX,Xv
  188. scas Yb,al
  189. scas Yv,rAx
  190. #0xb0
  191. mov al, Ib
  192. mov cl, Ib
  193. mov dl,Ib
  194. mov bl,Ib
  195. mov ah,Ib
  196. mov ch,Ib
  197. mov dh,Ib
  198. mov bh,Ib
  199. mov rAX,Iv
  200. mov rCX,Iv
  201. mov rDX,Iv
  202. mov rBX,Iv
  203. mov rSP,Iv
  204. mov rBP,Iv
  205. mov rSI,Iv
  206. mov rDI,Iv
  207. #0xc0
  208. group_2 Eb,Ib (80186+)
  209. group_2 Ev,Ib (80186+)
  210. retn Iw
  211. retn
  212. les Gz,Mp
  213. lds Gz,Mp
  214. group_11 Eb,Ib
  215. group_11 Ev,Iz
  216. enter Iw,Ib (80186+)
  217. leave (80186+)
  218. retf Iw
  219. retf
  220. int3
  221. int Ib
  222. into
  223. iret
  224. #0xd0
  225. group_2 Eb, 1
  226. group_2 Ev, 1
  227. group_2 Eb,CL
  228. group_2 Ev,CL
  229. aam Ib
  230. aad Ib
  231. salc () setalc ()
  232. xlat
  233. esc 0
  234. esc 1
  235. esc 2
  236. esc 3
  237. esc 4
  238. esc 5
  239. esc 6
  240. esc 7
  241. #0xe0
  242. loopnz Jb () loopne Jb ()
  243. loopz Jb () loope Jb ()
  244. loop Jb
  245. jcxz Jb () jecx Jb ()
  246. in al, Ib
  247. in eAX, Ib
  248. out Ib, al
  249. out Ib, eAX
  250. call Jz
  251. jmp Jz
  252. jmp Ap
  253. jmp Jb
  254. in al, dx
  255. in eAX, dx
  256. out dx,al
  257. out dx, eAX
  258. #f0
  259. lock:
  260. int1 () icebp (80386+)
  261. repnz: () repne: ()
  262. repz: () rep: () repe: ()
  263. hlt
  264. cmc
  265. group_3 Eb
  266. group_3 Ev
  267. clc
  268. stc
  269. cli
  270. sti
  271. cld
  272. std
  273. group_4 Eb # inc/dec
  274. group_5 Ev # inc/dec etc.
  275. '''
  276. group_1 = '''
  277. add
  278. or
  279. adc
  280. sbb
  281. and
  282. sub
  283. xor
  284. cmp
  285. '''
  286. group_2 = '''
  287. rol
  288. ror
  289. rcl
  290. rcr
  291. shl
  292. shr
  293. sal
  294. sar
  295. '''
  296. group_3 = '''
  297. test Ib
  298. test Iz
  299. not
  300. neg
  301. mul rAX
  302. imul rAX
  303. div rAX
  304. idiv rAX
  305. '''
  306. group_4 = '''
  307. inc Eb
  308. dec Eb
  309. '''
  310. group_5 = '''
  311. inc Ev
  312. dec Ev
  313. call Ev
  314. call Mp
  315. jmp Ev
  316. jmp Mp
  317. push Ev
  318. '''
  319. ### XXX: this doesn't look right...
  320. group_6 = '''
  321. sldt Mw () sldt Rv ()
  322. str Mw () str Rv ()
  323. lldt Mw () lldt Rv ()
  324. ltr Mw () ltr Rv ()
  325. verr Mw () verw Rv ()
  326. verw Mw () verw Rv ()
  327. jmpe Ev (IA-64)
  328. '''
  329. group_7 = '''
  330. sgdt Ms
  331. sidt Ms
  332. lgdt Ms
  333. lidt Ms
  334. smsw Mw
  335. -
  336. lmsw Mw
  337. invlpg M (80486+)
  338. '''
  339. group_8 = '''
  340. -
  341. -
  342. -
  343. -
  344. bt
  345. bts
  346. btr
  347. btc
  348. '''
  349. ### XXX: it looks like we'll need to provide a property of an opcode
  350. group_9 = '''
  351. -
  352. cmpxchg Mq
  353. -
  354. -
  355. -
  356. -
  357. vmptrld Mq
  358. vmptrst Mq
  359. '''
  360. group_10 = '''
  361. pop Ev
  362. '''
  363. # XXX: tbh, these tables are inaccurate due to lack of foresight on my part
  364. # and i'm tired of typing...
  365. opcode_2 = '''
  366. group_6
  367. group_7
  368. lar Gv,Ew
  369. lsl Gv,Ew
  370. -
  371. syscall
  372. clts
  373. sysret
  374. -
  375. -
  376. -
  377. -
  378. -
  379. -
  380. -
  381. -
  382. # 0x10
  383. movups Vp, Wp
  384. movups Wp, Vp
  385. movlps Vp, Mq () movhlps Vp,Vq ()
  386. movlps Mq, Vp
  387. unpcklps Vp, Wq
  388. unpckhps Vp,Wq
  389. movhps Vps,Mq () movlhps Vp,Wp ()
  390. -
  391. cmovs Gv,Ev
  392. cmovns Gv,Ev
  393. cmovp Gv,Ev
  394. cmovnp Gv,Ev
  395. cmovl Gv,Ev
  396. cmovnl Gv,Ev
  397. cmovle Gv,Ev
  398. cmovnle Gv,Ev
  399. # 0x20
  400. mov Rd, Cd
  401. mov Rd, Dd
  402. mov Cd, Rd
  403. mov Dd, Rd
  404. -
  405. -
  406. -
  407. -
  408. movaps Vp,Wp
  409. movaps Wp,Vp
  410. cvtpi2ps Vp,Qq
  411. movntps Md,Vp
  412. cvttps2pi Pq,Wp
  413. cvtps2pi Pq,Wp
  414. ucomiss Vs,Ws
  415. comiss Vp,Wp
  416. # 0x30
  417. wrmsr
  418. rdtsc
  419. rdmsr
  420. rdpmc
  421. sysenter
  422. sysexit
  423. -
  424. -
  425. -
  426. -
  427. -
  428. -
  429. -
  430. -
  431. -
  432. -
  433. # 0x40
  434. cmovo Gv,Ev
  435. cmovno Gv,Ev
  436. cmovb Gv,Ev
  437. cmovnb Gv,Ev
  438. cmovz Gv,Ev
  439. cmovnz Gv,Ev
  440. cmovbe Gv,Ev
  441. cmovnbe Gv,Ev
  442. cmovs Gv,Ev
  443. cmovns Gv,Ev
  444. cmovp Gv,Ev
  445. cmovnp Gv,Ev
  446. cmovl Gv,Ev
  447. cmovnl Gv,Ev
  448. cmovle Gv,Ev
  449. cmovnle Gv,Ev
  450. # 0x50
  451. movmskps Gd, Vp
  452. sqrtps Vp,Wp
  453. rsqrtps Vp,Wp
  454. rcpps Vp,Wp
  455. andps Vp,Wp
  456. andnps Vp,Wp
  457. orps Vp,Wp
  458. xorps Vp,Wp
  459. addps Vp,Wp
  460. mulps Vp,Wp
  461. cvtps2pd Vp,Wp
  462. cvtdq2ps Vp,Wd
  463. subps Vp,Wp
  464. minps Vp,Wp
  465. divps Vp,Wp
  466. maxps Vp,Wp
  467. # 0x60
  468. punpcklbw Pq,Qd
  469. punpcklwd Pq,Qd
  470. punpckldq Pq,Qd
  471. packsswb Pq,Qq
  472. pcmpgtb Pq,Qq
  473. pcmpgtw Pq,Qq
  474. pcmpgtd Pq,Qq
  475. packuswb Pq,Qq
  476. punpckhbw Pq,Qd
  477. punpckhwd Pq,Qd
  478. punpckhdq Pq,Qd
  479. packssdw Pq,Qq
  480. -
  481. -
  482. movd Pq, Ed
  483. movq Pq, Qq
  484. # 0x70
  485. pshufw Pq,Qq,Ib
  486. group_12
  487. group_13
  488. group_14
  489. pcmpeqb Pq,Qq
  490. pcmpeqw Pq,Qq
  491. pcmpeqd Pq,Qq
  492. emms
  493. -
  494. -
  495. -
  496. -
  497. -
  498. -
  499. movd Ed,Pd
  500. movq Qq,Pq
  501. # 0x80
  502. jo Jz
  503. jno Jz
  504. jb Jz
  505. jnb Jz
  506. jz Jz
  507. jnz Jz
  508. jbe Jz
  509. jnbe Jz
  510. js Jz
  511. jns Jz
  512. jp Jz
  513. jnp Jz
  514. jl Jz
  515. jnl Jz
  516. jle Jz
  517. jnle Jz
  518. # 0x90
  519. seto Eb
  520. setno Eb
  521. setb Eb
  522. setnb Eb
  523. setz Eb
  524. setnz Eb
  525. setbe Eb
  526. setnbe Eb
  527. sets Eb
  528. setns Eb
  529. setp Eb
  530. setnp Eb
  531. setl Eb
  532. setnl Eb
  533. setle Eb
  534. setnle Eb
  535. #0xa0
  536. push fs
  537. pop fs
  538. cpuid
  539. bt Ev,Gv
  540. shld Ev,Gv,Ib
  541. shld Ev,Gv,cl
  542. -
  543. -
  544. push gs
  545. pop gs
  546. rsm
  547. bts Ev,Gv
  548. shrd Ev,Gv,Ib
  549. shrd Ev,Gv,cl
  550. group_15
  551. imul Gv,Ev
  552. # 0xb0
  553. cmpxchg Eb,Gb
  554. cmpxchg Ev,Gv
  555. lss Gz,Mp
  556. btr Ev,Gv
  557. lfs Gz,Mp
  558. lgs Gz,Mp
  559. movzx Gv,Eb
  560. movzx Gv,Ew
  561. popcnt Gv,Ev # requires 0xf3
  562. group_10
  563. group_8 Ev,Ib
  564. btc Ev,Gv
  565. bsf Gv,Ev
  566. bsr Gv,Ev
  567. movsx Gv,Eb
  568. movsx Gv,Ew
  569. #0xc0
  570. xadd Eb,Gb
  571. xadd Ev,Gv
  572. cmpps Vp,Wp,Ib
  573. movnti Md,Gd
  574. pinsrw Pq,Eq,Ib
  575. pextrw Gd,Pq,Ib
  576. shufps Vp,Wp,Ib
  577. group_9 Mq
  578. bswap rAX
  579. bswap rCX
  580. bswap rDX
  581. bswap rBX
  582. bswap rSP
  583. bswap rBP
  584. bswap rSI
  585. bswap rDI
  586. # 0xd0
  587. addsubpd Vp,Wp #requires 0x66
  588. psrlw Pq,Qq
  589. psrld Pq,Qq
  590. psrlq Pq,Qq
  591. paddq Pq,Qq
  592. pmullw Pq,Qq
  593. movq Vd, Pq # requires 0x66
  594. -
  595. psubusb Pq,Qq
  596. psubusw Pq,Qq
  597. pminub Pq,Qq
  598. pand Pq,Qq
  599. paddusb Pq,Qq
  600. paddusw Pq,Qq
  601. pmaxub Pq,Qq
  602. andn Pq,Qq
  603. #0xe0
  604. pavgb Pq,Qq
  605. psraw Pq,Qq
  606. psrad Pq,Qq
  607. pavgw Pq,Qq
  608. pmulhuw Pq,Qq
  609. pmulhw Pq,Qq
  610. -
  611. movnq Mq,Pq
  612. psubsb Pq,Qq
  613. psubsw Pq,Qq
  614. pminsw Pq,Qq
  615. por Pq,Qq
  616. paddsb Pq,Qq
  617. paddsw Pq,Qq
  618. pmaxsw Pq,Qq
  619. pxor Pq,Qq
  620. # 0xf0
  621. lddqu Vp,Md
  622. psllw Pq,Qq
  623. pslld Pq,Qq
  624. psllq Pq,Qq
  625. pmuludq Pq,Qq
  626. pmaddwd Pq,Qq
  627. psadbw Pq,Qq
  628. maskmovq Pq,Pq
  629. psubb Pq,Qq
  630. psubw Pq,Qq
  631. psubd Pq,Qq
  632. psubq Pq,Qq
  633. paddb Pq,Qq
  634. paddw Pq,Qq
  635. paddd Pq,Qq
  636. -
  637. '''
  638. ### this is the main table we export
  639. table = {
  640. 'opcode_1' : opcode_1,
  641. 'opcode_2' : opcode_2,
  642. 'group_1' : group_1,
  643. 'group_2' : group_2,
  644. 'group_3' : group_3,
  645. 'group_4' : group_4,
  646. 'group_5' : group_5,
  647. 'group_6' : group_6,
  648. 'group_7' : group_7,
  649. 'group_8' : group_8,
  650. 'group_9' : group_9,
  651. 'group_10' : group_10,
  652. }