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

When using GETREGS, does ptrace get only userspace stack RSP, or both kernel and userspace RSP can be possible?

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

is it possible ... that the RIP is in kernel code segment and RSP is the kernel stack pointer?

没有,至少在 Linux 上没有。

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

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

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

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

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

和各种其他选项。