【问题标题】:Relation Between Program/Instruction Pointer(RIP) and Base/Frame Pointer(RBP) on 64 bit Linux64位Linux上程序/指令指针(RIP)和基/帧指针(RBP)之间的关系
【发布时间】:2010-07-07 12:06:24
【问题描述】:

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

【问题讨论】:

标签: ptrace


【解决方案1】:

任何压入堆栈的返回地址只会在当前运行的函数返回后得到%rip,而不是当前正在执行的函数的%rip。您应该能够像 GDB 一样获得当前的%rip

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

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

【讨论】:

    猜你喜欢
    • 2016-08-01
    • 2011-05-15
    • 2012-05-03
    • 2016-04-19
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2011-02-01
    相关资源
    最近更新 更多