64位Linux上的程序/指令指针(RIP)和基站/帧指针(RBP)之间的关系

时间:2010-07-07 12:06:24

标签: ptrace

我需要一些帮助来检索Linux 64位机器上的调用堆栈的指令指针( RIP )。我可以使用ptrace遍历堆栈并检索所有帧/基指针( RBP )值。但是,由于我想要IP值,RIP和RBP之间的算术和概念关系是什么。 我假设RIP值存储在(RBP + 8)位置,并且可以使用ptrace PEEKDATA 读取它。我的假设是正确的吗?

1 个答案:

答案 0 :(得分:2)

在堆栈上推送的任何返回地址只会在当前运行的函数返回后启动%rip,而不是当前正在执行的函数的%rip。您应该能够以与GDB相同的方式获取当前%rip

  • 理想情况下,您的平台支持PTRACE_GETREGSPTRACE_GETREGSET参数。您的联机帮助页和头文件应该可以让您完成剩下的工作。
  • 如果失败,您应该能够使用具有适当偏移量的PTRACE_PEEKUSER参数从用户区域中获取寄存器。

您可以在GDB源代码树中查看gdb/amd64-linux-nat.c中的gorey详细信息。