使用SIB字节对内存操作数进行编码允许> none寄存器<用于索引和base。所以这应该是一个有效的指令:
03 04 25 10 32 54 76 - add eax, dword [ 0x76543210 ]
地址应按如下方式计算:1·0 + 0 + 0x76543210并且不基于任何段寄存器。
在平坦记忆中,这不应该改变任何东西,但如果add eax, dword ds:0x76543210
不为零,这与ds
不同吗?
答案 0 :(得分:6)
在16位和32位操作模式中,指示无基数且无索引的SIB字节(即04 +r 25
)只是编码32位地址,就像modr / m字节05 +r
那样。这不会影响细分,ds
用于在两种情况下添加细分基础地址。
在长模式(64位模式)下,modr / m字节05 +r
表示rip
(resp。eip
)相对地址,而04 +r 25
表示绝对地址。例如:
8b 05 XX XX XX XX is mov eax, [rip+XXXXXXXX]
8b 04 25 XX XX XX XX is mov eax, [XXXXXXXX]