2

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

4

1 回答 1

2

任何压入堆栈的返回地址只会%rip在当前运行的函数返回后让您开始,而不是%rip当前正在执行的函数。您应该能够%rip像 GDB 一样掌握当前的情况:

  • 理想情况下,您的平台支持PTRACE_GETREGSorPTRACE_GETREGSET参数。您的联机帮助页和头文件应该让您从这里开始。
  • 否则,您应该能够使用PTRACE_PEEKUSER具有适当偏移量的参数从用户区域获取寄存器。

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

于 2010-07-10T15:07:15.800 回答