x86(32ビット)逆アセンブルのための表

  • (by K, 2018.10.23)

(1) 1バイトオペコード

00-05ADD(パターン1)
06PUSH ES
07POP ES
08-0DOR(パターン1)
0EPUSH CS
0F(2バイトオペコード)
10-15ADC(パターン1)
16PUSH SS
17POP SS
18-1DSBB(パターン1)
1EPUSH DS
1FPOP DS
20-25AND(パターン1)
26CS:
27DAA
28-2DSUB(パターン1)
2ESS:
2FDAS
30-35XOR(パターン1)
36DS:
37AAA
38-3DCMP(パターン1)
3EES:
3FAAS
40-47INC reg3216ビットモードのときはreg16になる
48-4FDEC reg3216ビットモードのときはreg16になる
50-57PUSH reg3216ビットモードのときはreg16になる
58-5FPOP reg3216ビットモードのときはreg16になる
60PUSHAD16ビットモードのときはPUSHAになる
61POPAD16ビットモードのときはPOPAになる
62 /rBOUND reg32,m32&3216ビットモードのときはreg16,m16&16になる
63 /rARPL r/m16,reg16
64FS:
65GS:
66(opsiz:)
67(adrsiz:)
68 imm32PUSH imm3216ビットモードのときはimm16になる
69 /r imm32IMUL reg32,r/m32,imm3216ビットモードのときはreg16,r/m16,imm16になる
6A imm8PUSH imm8モードに合わせてimm8は符号拡張される
6B /r imm8IMUL reg32,r/m32,imm816ビットモードのときはreg16,r/m16,imm8になる
6CINSB
6DINSD16ビットモードのときはINSW
6EOUTSB
6FOUTSD16ビットモードのときはOUTSW
70-7F imm8Jcc shortオペコードの下位4ビットがコンディションコード(cc)に対応している
80 /f imm8fff r/m8,imm8
81 /f imm32fff r/m32,imm3216ビットモードのときはr/m16,imm16になる
82 /f imm8fff r/m8,imm880と同じ
83 /f imm8fff r/m32,immimmはimm8を符号拡張する。16ビットモードのときはr/m32になる
84 /rTEST reg8,r/m8
85 /rTEST reg32,r/m3216ビットモードのときはreg16,r/m16になる
86 /rXCHG reg8,r/m8
87 /rXCHG reg32,r/m3216ビットモードのときはreg16,r/m16になる
88 /rMOV r/m8,reg8
89 /rMOV r/m32,reg3216ビットモードのときはr/m16,reg16になる
8A /rMOV reg8,r/m8
8B /rMOV reg32,r/m3216ビットモードのときはreg16,r/m16になる
8C /sMOV r/m16,sreg/sでsregをエンコードする(32ビットモードの挙動に注意点あり)
8D /rLEA reg32,mem/rでreg32をエンコードする。16ビットモードのときはreg16,memになる
8E /sMOV sreg,r/m16/sでsregをエンコードする
8F /0POP r/m3216ビットモードのときはr/m16になる
90NOP
91-97XCHG EAX,reg3216ビットモードのときはAX,reg16になる
98CWDE16ビットモードのときはCBWになる
99CDQ16ビットモードのときはCWDになる
9A imm48CALL FAR imm4816ビットモードのときはimm32になる
9BWAIT
9CPUSHFD16ビットモードのときはPUSHFになる
9DPOPFD16ビットモードのときはPOPFになる
9ESAHF
9FLAHF
A0 imm32MOV AL,[imm32]16ビットモードのときはAL,[imm16]になる
A1 imm32MOV EAX,[imm32]16ビットモードのときはAX,[imm16]になる
A2 imm32MOV [imm32],AL16ビットモードのときは[imm16],ALになる
A3 imm32MOV [imm32],EAX16ビットモードのときは[imm16],EAXになる
A4MOVSB
A5MOVSD16ビットモードのときはMOVSWになる
A6CMPSB
A7CMPSD16ビットモードのときはCMPSWになる
A8 imm8TEST AL,imm8
A9 imm32TEST EAX,imm3216ビットモードのときはAX,imm16になる
AASTOSB
ABSTOSD16ビットモードのときはSTOSWになる
AESCASB
AFSCASD16ビットモードのときはSCASWになる
B0-B7 imm8MOV reg8,imm8
B8-BF imm32MOV reg32,imm3216ビットモードのときはreg16,imm16になる
C0 /S imm8SSS r/m8,imm8(基本シフト命令)
C1 /S imm8SSS r/m32,imm8(基本シフト命令)16ビットモードのときはr/m16になる
C2 imm16RET imm16
C3RET
C4 /rLES reg32,mem4816ビットモードのときはreg16,mem32になる
C5 /rLDS reg32,mem4816ビットモードのときはreg16,mem32になる
C6 /0MOV r/m8,imm8
C7 /0MOV r/m32,imm3216ビットモードのときはr/m16,imm16になる
C8 imm16 imm8ENTER imm16,imm8
C9LEAVE
CA imm16RETF imm16
CBRETF
CCINT3
CD imm8INT imm8
CEINTO
CFIRETD16ビットモードのときはIRETになる
D0 /SSSS r/m8,1(基本シフト命令)
D1 /SSSS r/m32,1(基本シフト命令)16ビットモードのときはr/m16になる
D2 /SSSS r/m8,CL(基本シフト命令)
D3 /SSSS r/m32,CL(基本シフト命令)16ビットモードのときはr/m16になる
D4 imm8imm8=0Aなら、AAMになる
D5 imm8imm8=0Aばら、AADになる
D6未定義(SETALC)
D7XLATB
D8-DFFPU命令
E0 imm8LOOPNZ short imm8
E1 imm8LOOPZ short imm8
E2 imm8LOOP short imm8
E3 imm8JECXZ short imm8
E4 imm8IN AL,imm8
E5 imm8IN EAX,imm816ビットモードのときはEAX,imm8になる
E6 imm8OUT imm8,AL
E7 imm8OUT imm8,EAX16ビットモードのときはimm8,EAXになる
E8 imm32CALL imm3216ビットモードのときはimm16になる
E9 imm32JMP imm3216ビットモードのときはimm16になる
EA imm48JMP FAR imm4816ビットモードのときはimm32になる
EB imm8JMP short imm8
ECIN AL,DX
EDIN EAX,DX16ビットモードのときはAX,DXになる
EEOUT DX,AL
EFOUT DX,EAX16ビットモードのときはDX,AXになる
F0LOCK:
F1INT1
F2REPNE
F3PEPE/REP
F4HLT
F5CMC
F6 /0 imm8TEST r/m8,imm8
F6 /1 imm8TEST r/m8,imm8F6 /0と同じ
F6 /2NOT r/m8
F6 /3NEG r/m8
F6 /4MUL r/m8
F6 /5IMUL r/m8
F6 /6DIV r/m8
F6 /7IDIV r/m8
F7 /0 imm32TEST r/m32,imm32
F7 /1 imm32TEST r/m32,imm32F7 /0と同じ
F7 /2NOT r/m32
F7 /3NEG r/m32
F7 /4MUL r/m32
F7 /5IMUL r/m32
F7 /6DIV r/m32
F7 /7IDIV r/m32
F8CLC
F9STC
FACLI
FBSTI
FCCLD
FDSTD
FE /0INC r/m8
FE /1DEC r/m8
FF /0INC r/m32
FF /1DEC r/m32
FF /2CALL mem32間接NEARコール
FF /3CALL FAR mem48間接FARコール
FF /4JMP mem32間接NEARジャンプ
FF /5JMP FAR mem48間接FARジャンプ
FF /6PUSH r/m32

(2) 2バイトオペコード

0F 00 /0SLDT r/m16
0F 00 /1STR r/m16
0F 00 /2LLDT r/m16
0F 00 /3LTR r/m16
0F 00 /4VERR r/m16
0F 00 /5VERW r/m16
0F 01 /0SGDT m48
0F 01 /1SIDT m48
0F 01 /2LGDT m48
0F 01 /3LIDT m48
0F 01 /4SMSW r/m16
0F 01 /6LMSW r/m16
0F 01 /7INVLPG m
0F 01 F9RDTSCP
0F 02 /rLAR reg16,r/m16
0F 03 /rLSL reg32,r/m16
0F 06CLTS
0F 08INVD
0F 09WBINVD
0F 20 /nMOV reg32,CRnmod=11しか指定できない(reg32-only)。mod_r/mバイトのnnnでCRの番号を指定
0F 21 /nMOV reg32,DRnmod=11しか指定できない(reg32-only)。mod_r/mバイトのnnnでDRの番号を指定
0F 22 /nMOV CRn,reg32mod=11しか指定できない(reg32-only)。mod_r/mバイトのnnnでCRの番号を指定
0F 23 /nMOV DRn,reg32mod=11しか指定できない(reg32-only)。mod_r/mバイトのnnnでDRの番号を指定
0F 30WRMSR
0F 31RDTSC
0F 32RDMSR
0F 33RDPMC
0F 34SYSENTER
0F 35SYSEXIT
0F 40-4FCMOVcc reg32,r/m32オペコードの下位4ビットがccに対応している
0F 80-8FJcc near imm32オペコードの下位4ビットがccに対応している
0F 90-9F /0SETcc r/m8オペコードの下位4ビットがccに対応している
0F A0PUSH FS
0F A1POP FS
0F A2CPUIDhttp://softwaretechnique.jp/OS_Development/Tips/IA32_Instructions/CPUID.html のオペコードは間違っている
0F A3 /rBT r/m32,reg32
0F A4 /r imm8SHLD r/m32,reg32,imm8
0F A5 /rSHLD r/m32,reg32,CL
0F A8PUSH GS
0F A9POP GS
0F AB /rBTS r/m32,reg32
0F AC /r imm8SHRD r/m32,reg32,imm8
0F AD /rSHRD r/m32,reg32,CL
0F AF /rIMUL reg32,r/m32
0F B0 /rCMPXCHG r/m8,reg8
0F B1 /rCMPXCHG r/m32,reg32
0F B2 /rLSS reg32,m48
0F B3 /rBTR r/m32,reg32
0F B4 /rLFS reg32,m48
0F B5 /rLGS reg32,m48
0F B6 /rMOVZX reg32,r/m8
0F B7 /rMOVZX reg32,r/m16
0F BA /4 imm8BT r/m32,imm8
0F BA /5 imm8BTS r/m32,imm8
0F BA /6 imm8BTR r/m32,imm8
0F BA /7 imm8BTC r/m32,imm8
0F BB /rBTC r/m32,reg32
0F BC /rBSF reg32,r/m32
0F BD /rBSR reg32,r/m32
0F BE /rMOVSX reg32,r/m8
0F BF /rMOVSX reg32,r/m16
0F C0 /rXADD reg8,r/m8
0F C1 /rXADD reg32,r/m32
0F C7 /1CMPXCHG8B mem64
0F C8-CFBSWAP reg32オペコードの下位3ビットがレジスタ番号に対応している

(3)

  • レジスタ番号(8bit)
    01234567
    ALCLDLBLAHCHDHBH


  • レジスタ番号(32bit)
    01234567
    EAXECXEDXEBXESPEBPESIEDI


  • レジスタ番号(sreg)
    012345
    ESCSSSDSFSGS


  • 典型型の整数演算の機能番号(f)
    01234567
    ADDORADCSBBANDSUBXORCMP


  • 条件分岐のコンディションコード(cc)
    0123456789ABCDEF
    ONOBNBZNZBENBESNSPNPLNLLENLE


  • 基本シフト命令(S)
    01234567
    ROLRORRCLRCRSHLSHRSALSAR

(4)

  • パターン1(00-3D)
    00fff000 /rfff r/m8,reg8/rでreg8をエンコードする
    00fff001 /rfff r/m32,reg32/rでreg32をエンコードする。16ビットモードのときはr/m16,reg16になる
    00fff010 /rfff reg8,r/m8/rでreg8をエンコードする
    00fff011 /rfff reg32,r/m32/rでreg32をエンコードする。16ビットモードのときはreg16,r/m16になる
    00fff100fff AL,imm8
    00fff101fff EAXL,imm3216ビットモードのときはAXになる

(9)


リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2018-10-25 (木) 17:18:52 (83d)