【问题标题】:Get registers with ptrace in arm-linux在 arm-linux 中使用 ptrace 获取寄存器
【发布时间】:2019-10-02 15:53:31
【问题描述】:

试图在arm linux中获取线程的PC寄存器。

有进程,进程 id = 120,它有 3 个线程:线程 id:121,122,123。

#include <sys/ptrace.h>
#include <sys/user.h>
int main()
{
    struct user_regs_struct regs;
    ptrace (PTRACE_ATTACH,123,0,0);
    ptrace (PTRACE_GETREGS,123,NULL,&regs);
    printf ("0x%x",regs.pc);
}

在gcc-arm编译器中编译时,报错error: storage size of 'regs' isn't known struct user_regs_struct regs

为什么这个结构未知?如何使用 ptrace 获取线程的寄存器值?

【问题讨论】:

标签: c linux arm cpu-registers ptrace


【解决方案1】:

检查您的sys/user.h,就像man 页面上所说的那样。

您可能会以不同的名称找到它,例如 struct user_regs。

【讨论】:

  • user_regs_struct 似乎是 x86 特定的。 user_regs 在某些内核版本中似乎是 ARM 特定的。不同的 ARM Linux 可能/可能没有 VFP,因此 PTRACE_GETREGS 返回不同的值。我相信 R0-R15 始终是返回的前 16 个整数。您可以分配一个更大的数组并只使用前 16 个值。 CPSR 为 16,原始 R0 为 17。然后是 VFP(如果存在)。
猜你喜欢
  • 1970-01-01
  • 2015-11-02
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多