【问题标题】:When using GETREGS, does ptrace get only userspace stack RSP, or both kernel and userspace RSP can be possible?使用 GETREGS 时,ptrace 是否仅获取用户空间堆栈 RSP,或者内核和用户空间 RSP 都可以?
【发布时间】:2015-03-11 21:46:52
【问题描述】:

当使用 ptrace 获取另一个进程的寄存器时,停止点是否可能在内核空间中(进行系统调用或类似在 sleep() 中的东西),RIP 在内核代码段中,而 RSP 是内核堆栈指针?

【问题讨论】:

    标签: linux debugging linux-kernel gdb ptrace


    【解决方案1】:

    ptrace() 本身就是一个系统调用。因此,当您在用户空间中使用它时,返回值在用户空间中。并且返回值是调试对象在其执行中停止的时间 - 这必须在用户空间中。

    这些都在系统调用 API 定义中指定。

    http://man7.org/linux/man-pages/man2/syscalls.2.html

    但是如果你想在内核中追踪程序执行的踪迹,可以通过 Intel Processor Tracing 等硬件功能实现:

    https://software.intel.com/en-us/blogs/2013/09/18/processor-tracing

    和其他各种选项。

    【讨论】:

      【解决方案2】:

      有没有可能... RIP 在内核代码段中,而 RSP 是内核堆栈指针?

      不,至少在 Linux 上不是。

      【讨论】:

      • 您能解释一下原因吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2011-09-25
      相关资源
      最近更新 更多