アドレッシングモードと、ModR/M・SIBの相関性がいまいち分からないので、アドレッシングモードのバリエーションを変えてみて実験してみる。
0: b8 78 56 34 12 mov eax,0x12345678
5: 89 04 24 mov DWORD PTR [esp],eax
8: 89 f0 mov eax,esi
a: a1 ff ff ff 7f mov eax,ds:0x7fffffff
f: 2e a1 ff ff ff 7f mov eax,cs:0x7fffffff
15: 8b 46 08 mov eax,DWORD PTR [esi+0x8]
18: 8b 44 9e 08 mov eax,DWORD PTR [esi+ebx*4+0x8]
1c: a3 ff ff ff 7f mov ds:0x7fffffff,eax
21: 2e a3 ff ff ff 7f mov cs:0x7fffffff,eax
27: 89 1d ff ff ff 7f mov DWORD PTR ds:0x7fffffff,ebx
2d: 2e 89 1d ff ff ff 7f mov DWORD PTR cs:0x7fffffff,ebx
34: 89 46 08 mov DWORD PTR [esi+0x8],eax
37: 89 44 9e 08 mov DWORD PTR [esi+ebx*4+0x8],eax
ニーモニック一覧は以下の通り。
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov eax,0x12345678 |
- |
B8 |
- |
- |
- |
12345678 |
mov DWORD PTR [esp],eax |
- |
89 |
04 (00 000 100) |
24 (00 100 100) |
- |
- |
mov eax,esi |
- |
89 |
F0 (11 110 000) |
- |
- |
- |
mov eax,ds:0x7fffffff |
- |
A1 |
- |
- |
7FFFFFFF |
- |
mov eax,cs:0x7fffffff |
2E |
A1 |
- |
- |
7FFFFFFF |
- |
mov eax,DWORD PTR [esi+0x8] |
- |
8B |
46 (01 000 110) |
- |
08 |
- |
mov eax,DWORD PTR [esi+ebx*4+0x8] |
- |
8B |
44(01 000 100) |
9E (10 011 110) |
08 |
- |
mov ds:0x7fffffff,eax |
- |
A3 |
- |
- |
7FFFFFFF |
- |
mov cs:0x7fffffff,eax |
2E |
A3 |
- |
- |
7FFFFFFF |
- |
mov DWORD PTR ds:0x7fffffff,ebx |
- |
89 |
1D |
- |
7FFFFFFF |
- |
mov DWORD PTR cs:0x7fffffff,ebx |
2E |
89 |
1D |
- |
7FFFFFFF |
- |
mov DWORD PTR [esi+0x8],eax |
- |
89 |
46 |
- |
08 |
- |
mov DWORD PTR [esi+ebx*4+0x8],eax |
- |
89 |
44 |
9E |
08 |
- |
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov eax,0x12345678 |
- |
B8 |
- |
- |
- |
12345678 |
field |
value |
prefix |
- |
opecode |
B8+rd (imm32をEAXレジスタに転送) |
ModR/M |
- |
SIB |
- |
displacement |
- |
immediate |
12345678 |
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov DWORD PTR [esp],eax |
- |
89 |
04 (00 000 100) |
24 (00 100 100) |
- |
- |
field |
value |
prefix |
- |
opecode |
89 (r32をm32に転送) |
ModR/M |
04 |
Mod |
00 (レジスタのみで実行アドレスを指定) |
reg/opcode |
000 (EAX) |
r/m |
100 (SIBあり) |
SIB |
24 |
Scale |
00 (x1) |
reg/opcode |
100 (インデックスなし) |
r/m |
100 (ESP) |
displacement |
- |
immediate |
- |
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov eax,esi |
- |
89 |
F0 (11 110 000) |
- |
- |
- |
field |
value |
prefix |
- |
opecode |
89 (r32をr32に転送) |
ModR/M |
F0 |
Mod |
11 (レジスタ値を指定) |
reg/opcode |
110 (ESI) |
r/m |
000 (EAX) |
SIB |
- |
displacement |
- |
immediate |
- |
セグメント(DS):オフセット→レジスタ転送
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov eax,ds:0x7fffffff |
- |
A1 |
- |
- |
7FFFFFFF |
- |
field |
value |
prefix |
- |
opecode |
A1 ((セグメント:オフセット)のDWORDをEAXに転送) |
ModR/M |
- |
SIB |
- |
displacement |
7FFFFFFF |
immediate |
- |
セグメント(DS以外):オフセット→レジスタ転送
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov eax,cs:0x7fffffff |
2E |
A1 |
- |
- |
7FFFFFFF |
- |
field |
value |
prefix |
2E (CSセグメント・オーバーライド) |
opecode |
A1 ((セグメント:オフセット)のDWORDをEAXに転送) |
ModR/M |
- |
SIB |
- |
displacement |
7FFFFFFF |
immediate |
- |
ベース+8ビットディスプレースメント→レジスタ転送
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov eax,DWORD PTR [esi+0x8] |
- |
8B |
46 (01 000 110) |
- |
08 |
- |
field |
value |
prefix |
- |
opecode |
8B (m32をr32に転送) |
ModR/M |
46 (01 000 110) |
Mod |
01 (レジスタ+8ビットディスプレースメントで実行アドレスを指定) |
reg/opcode |
000 (EAX) |
r/m |
110 (ESI) |
SIB |
- |
displacement |
08 |
immediate |
- |
ベース+インデックス+8ビットディスプレースメント→レジスタ転送
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov eax,DWORD PTR [esi+ebx*4+0x8] |
- |
8B |
44(01 000 100) |
9E (10 011 110) |
08 |
- |
field |
value |
prefix |
- |
opecode |
8B (m32をr32に転送) |
ModR/M |
44 (01 000 100) |
Mod |
01 (レジスタ+8ビットディスプレースメントで実行アドレスを指定) |
reg/opcode |
000 (EAX) |
r/m |
100 (SIBあり+8ビットディスプレースメント) |
SIB |
9E |
Scale |
10 (x4) |
Index |
011 (EBX) |
Base |
|
110 (ESI) |
displacement |
0x8 |
immediate |
- |
レジスタ→セグメント(DS):オフセット転送
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov ds:0x7fffffff,eax |
- |
A3 |
- |
- |
7FFFFFFF |
- |
field |
value |
prefix |
- |
opecode |
A3 (EAXを(セグメント:オフセット)に転送) |
ModR/M |
- |
SIB |
- |
displacement |
7FFFFFFF |
immediate |
- |
レジスタ→セグメント(DS以外):オフセット転送
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov cs:0x7fffffff,eax |
2E |
A3 |
- |
- |
7FFFFFFF |
- |
field |
value |
prefix |
2E (CSセグメント・オーバーライド) |
opecode |
A3 (EAXを(セグメント:オフセット)に転送) |
ModR/M |
- |
SIB |
- |
displacement |
7FFFFFFF |
immediate |
- |
レジスタ→セグメント(DS):オフセット転送
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov DWORD PTR ds:0x7fffffff,ebx |
- |
89 |
1D |
- |
7FFFFFFF |
- |
field |
value |
prefix |
- |
opecode |
89 (r32をm32に転送) |
ModR/M |
1D (00 011 101) |
Mod |
00 (レジスタのみで実行アドレスを指定) |
reg/opcode |
011 (EBX) |
r/m |
101 (32ビットディスプレースメント) |
SIB |
- |
displacement |
7FFFFFFF |
immediate |
- |
レジスタ→セグメント(DS以外):オフセット転送
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov DWORD PTR cs:0x7fffffff,ebx |
2E |
89 |
1D |
- |
7FFFFFFF |
- |
field |
value |
prefix |
2E (CSセグメント・オーバーライド) |
opecode |
89 (r32をm32に転送) |
ModR/M |
1D (00 011 101) |
Mod |
00 (レジスタのみで実行アドレスを指定) |
reg/opcode |
011 (EBX) |
r/m |
101 (32ビットディスプレースメント) |
SIB |
- |
displacement |
7FFFFFFF |
immediate |
- |
レジスタ→ベース+8ビットディスプレースメント
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov DWORD PTR [esi+0x8],eax |
- |
89 |
46 |
- |
08 |
- |
field |
value |
prefix |
- |
opecode |
89 (r32をm32に転送) |
ModR/M |
46 (01 000 110) |
Mod |
01 (レジスタ+8ビットディスプレースメントで実行アドレスを指定) |
reg/opcode |
000 (EAX) |
r/m |
110 (ESI) |
SIB |
- |
displacement |
08 |
immediate |
- |
レジスタ→ベース+インデックス+8ビットディスプレースメント
mnemonic |
prefix |
opecode |
ModR/M |
SIB |
displacement |
immediate |
mov DWORD PTR [esi+ebx*4+0x8],eax |
- |
89 |
44 |
9E |
08 |
- |
field |
value |
prefix |
- |
opecode |
89 (r32をm32に転送) |
ModR/M |
44 (01 000 100) |
Mod |
01 (レジスタ+8ビットディスプレースメント) |
reg/opcode |
000 (EAX) |
r/m |
100 (SIBあり+8ビットディスプレースメント) |
SIB |
9E |
Scale |
10 (x4) |
Index |
011 (EBX) |
Base |
|
110 (ESI) |
displacement |
08 |
immediate |
- |