ptrace笔记
学习ptrace的同时简单做一些笔记
ptrace原型:
1 |
|
只使用ptrace函数,实现各种调试功能,具体实现啥功能,根据第一个参数决定。
第一个参数记录
- PTRACE_TRACEME,允许自己被跟踪
- PTRACE_CONT(continue缩写),继续执行
- PTRACE_ATTACH,附加某个进程,也就是调试进程
- PTRACE_DETACH,分离子进程,让子进程继续执行
- PTRACE_SYSCALL,执行到下一个syscall
- PTRACE_PEEKUSER,获取用USER区域(该USER指的是
sys/user.h
)值,基本就是获取各种寄存器的值 - PTRACE_POKEUSER,写数据到USER区域
- PRACE_GETREGS,获取所有寄存器的值
- PTRACE_PEEKTEXT, PTRACE_PEEKDATA,两个暂时是等价的,可以获取指定地址的内存数据
- PTRACE_POKETEXT,PTRACE_POKEDATA,写数据到指定地址
- PTRACE_SINGLESTEP,单步执行
其他记录
- PTRACE_ATTACH和PTRACE_TRACEME都会往子进程发送
SIGSTOP
信号,如果我们修改了该程序对这个信号的反应,是不是可以防止attach? - ptrace是遇到syscall就会中断下来把控制权交给父进程,所以下断点就是把相应地址的指令改成
syscall
或者int 80
这类的指令。