Linux内核调试方法总结之ptrace
ptrace
【用途】
进程跟踪器,类似于gdb watch的调试方法
【原理】【详细说明参考man ptrace帮助文档】
ptrace系统调用主要是父进程用来观察和控制子进程的执行过程、检查并替换子进程执行序列或者寄存器值的一种手段。主要用于实现断点调试和跟踪系统调用。
【接口说明】
#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
序号 |
宏定义 |
说明 |
1 |
PTRACE_TRACEME |
子进程通知内核该进程被父进程trace |
2 |
PTRACE_PEEKTEXT |
偷看子进程的代码段 |
3 |
PTRACE_PEEKDATA |
偷看子进程的数据段 |
4 |
PTRACE_PEEKUSER |
偷看子进程的用户数据 |
5 |
PTRACE_POKETEXT |
篡改子进程的代码段 |
6 |
PTRACE_POKEDATA |
篡改子进程的数据段 |
7 |
PTRACE_POKEUSER |
篡改子进程的用户数据 |
8 |
PTRACE_GETREGS |
读取子进程的寄存器值 |
9 |
PTRACE_GETFPREGS |
读取子进程的浮点型寄存器值 |
10 |
PTRACE_GETSIGINFO |
查看导致子进程中止执行的信号量的信息 |
11 |
PTRACE_SETREGS |
设置子进程寄存器值 |
12 |
PTRACE_SETFPREGS |
设置子进程浮点型寄存器值 |
13 |
PTRACE_SETSIGINFO |
设置子进程响应的信号量 |
14 |
PTRACE_SETOPTIONS |
设置跟踪选项 |
15 |
PTRACE_GETEVENTMSG |
获取ptrace事件信息,并保存到父进程的数据段 |
16 |
PTRACE_CONT |
父进程中调用,通知子进程继续执行 |
17 |
PTRACE_SYSCALL |
|
18 |
PTRACE_SINGLESTEP |
单步调试 |
19 |
PTRACE_SYSEMU |
|
20 |
PTRACE_SYSEMU_SINGLESTEP |
多步调试 |
21 |
PTRACE_KILL |
删除子进程的跟踪器 |
22 |
PTRACE_ATTACH |
附加跟踪器到子进程上 |
23 |
PTRACE_DETACH |
移除子进程上的跟踪器 |