假设我想使用以下操作码进行短跳转:
EB CB 或 JMP rel8
“跳短点,RIP = RIP + 8 位位移符号扩展为 64 位”
(其中 CB 是一个字节符号值,表示与EIP寄存器中的方向相关的相对偏移量)
也许偏移量总是偏移量+2,因为在这个短跳转中执行时间(参考方向)的 EIP 是双字节指令的基数,但加数总是发生
eb 30 = jmp 0x00000032 (+30)
eb e2 = jmp 0xffffffe4 (-30)
那么 EIP 可以故意是相同的方向,因为 fe + 2 是00或EIP。
eb fe = jmp 0x00000000
我发现令人惊讶的是,尽管这个数字是负数,但过度偏移却出现了分叉。但在英特尔我发现没有提及(可能是因为 3000 页)。
英特尔® 64 和 IA-32 架构软件开发人员手册:卷。2A 3-423
跳跃范围限制为当前EIP 值的 –128 到 +127 的近跳跃。
然后我考虑了三种可能性:
- 是 +2,因为是EIP 在执行时间中的后/未来值
- 编码值不是 2s 分量编码的有符号数。
- 这出现在手册中,但我没有看到,因为我很愚蠢