我尝试读取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
读取指令吗?
答案 0 :(得分:0)
取决于体系结构%rip保存当前正在执行的指令或下一条要执行的指令。这里你在0x4017ec之前添加了一个断点,这意味着下一条要执行的指令是0x4017ec。但只有在执行第一条指令后才会加载%rsi。到那时%rip已经更新为指向下一条指令。
答案 1 :(得分:0)
rip在运行当前指令时始终保持下一条指令的地址。如果要通过下一条指令的地址来进行事实更新,这是当前指令执行过程的一部分。