【发布时间】:2018-05-07 17:09:48
【问题描述】:
我尝试读取 x86_64 寄存器 rip 的值。这是objdump 显示的内容。
4017ec: 48 8d 35 00 00 00 00 lea 0x0(%rip),%rsi
4017f3: 41 89 d4 mov %edx,%r12d
我希望在指令0x4017ec 执行后,rsi 的值应该是0x4017ec。不过是0x4017f3,也就是下一条指令的地址。
我使用 gdb 停在0x4017ec,当时rip 的值是0x4017ec。为什么rsi当时没有被rip的值加载?处理器应该从0x4017ec 读取指令吗?
【问题讨论】:
-
不确定这是否是实际原因,但我不希望指令在被读取之前执行,这可能会将 ip 寄存器更新为指令之后。
-
IIRC,这很正常。在执行一条指令期间,
rip指向指令的end,即下一条指令的开始。这与跳转和调用指令相同。相对位移是从jmp的末尾开始
标签: assembly x86-64 cpu-registers addressing-mode