1

我尝试读取 x86_64 register 的值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吗?

4

2 回答 2

2

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

于 2020-04-08T15:25:02.343 回答
-3

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

于 2016-11-11T15:56:14.580 回答