32位移,近距离呼叫,实模式

时间:2016-10-22 11:06:15

标签: x86 call real-mode

假设我们有近乎相对的调用x86指令。

E8 offset      // offset from the next instruction

偏移的大小由当前操作数大小决定。

在32位保护模式下:

E8 rel32      // target 32bit address = add_32bit(eip, rel32)
66 E8 rel16   // target 32bit address = zero_extend_32bit(add_16bit(ip, rel16))

在64位模式下:

E8 rel32     // target 64bit address = add_64bit(rip, sign_extend_64bit(rel32))
66 E8 rel16     // target 64bit address = zero_extend_64bit(add_16bit(ip, rel16))

在实模式下:

E8 rel16     // target 16bit address = add_16bit(ip, rel16)

我不明白如果我们在实模式下有32位位移会发生什么?一种可能的方式:

66 E8 rel32  // target 16bit address = truncate_16bit(add_32bit(eip, rel32))

因此在这种情况下,ip将加载目标16位地址。但另一种可能的情况是eip将加载目标32位地址,如果它是>将生成0xFFFF保护错误。

那么66 E8 rel32在实模式下会发生什么?感谢。

0 个答案:

没有答案