使用 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
和各种其他选项。
当使用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
和各种其他选项。