使用GETREGS时,ptrace是仅获取用户空间堆栈RSP,还是内核和用户空间RSP都可以?

时间:2015-01-13 20:06:00

标签: linux debugging linux-kernel gdb ptrace

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

2 个答案:

答案 0 :(得分:1)

  

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

不,至少在Linux上没有。

答案 1 :(得分:0)

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

这些都在syscall API定义中指定。

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

但是如果你想跟踪内核中的程序执行跟踪,可以通过英特尔处理器跟踪等硬件功能实现:

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

以及其他各种选择。