读取寄存器rip但获取下一条指令的地址

时间:2015-11-22 06:22:08

标签: x86-64 cpu-registers

我尝试读取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读取指令吗?

2 个答案:

答案 0 :(得分:0)

取决于体系结构%rip保存当前正在执行的指令或下一条要执行的指令。这里你在0x4017ec之前添加了一个断点,这意味着下一条要执行的指令是0x4017ec。但只有在执行第一条指令后才会加载%rsi。到那时%rip已经更新为指向下一条指令。

答案 1 :(得分:0)

rip在运行当前指令时始终保持下一条指令的地址。如果要通过下一条指令的地址来进行事实更新,这是当前指令执行过程的一部分。