【发布时间】:2015-03-11 21:46:52
【问题描述】:
当使用 ptrace 获取另一个进程的寄存器时,停止点是否可能在内核空间中(进行系统调用或类似在 sleep() 中的东西),RIP 在内核代码段中,而 RSP 是内核堆栈指针?
【问题讨论】:
标签: linux debugging linux-kernel gdb ptrace
当使用 ptrace 获取另一个进程的寄存器时,停止点是否可能在内核空间中(进行系统调用或类似在 sleep() 中的东西),RIP 在内核代码段中,而 RSP 是内核堆栈指针?
【问题讨论】:
标签: linux debugging linux-kernel gdb ptrace
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
和其他各种选项。
【讨论】:
有没有可能... RIP 在内核代码段中,而 RSP 是内核堆栈指针?
不,至少在 Linux 上不是。
【讨论】: