当使用ptrace获取另一个进程的寄存器时,停止点是否可能在内核空间(进行系统调用或类似于sleep()),RIP是在内核代码段中而RSP是内核堆栈指针?
答案 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
以及其他各种选择。