ptrace笔记

学习ptrace的同时简单做一些笔记

ptrace原型:

1
2
#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);

只使用ptrace函数,实现各种调试功能,具体实现啥功能,根据第一个参数决定。

第一个参数记录

  1. PTRACE_TRACEME,允许自己被跟踪
  2. PTRACE_CONT(continue缩写),继续执行
  3. PTRACE_ATTACH,附加某个进程,也就是调试进程
  4. PTRACE_DETACH,分离子进程,让子进程继续执行
  5. PTRACE_SYSCALL,执行到下一个syscall
  6. PTRACE_PEEKUSER,获取用USER区域(该USER指的是sys/user.h)值,基本就是获取各种寄存器的值
  7. PTRACE_POKEUSER,写数据到USER区域
  8. PRACE_GETREGS,获取所有寄存器的值
  9. PTRACE_PEEKTEXT, PTRACE_PEEKDATA,两个暂时是等价的,可以获取指定地址的内存数据
  10. PTRACE_POKETEXT,PTRACE_POKEDATA,写数据到指定地址
  11. PTRACE_SINGLESTEP,单步执行

其他记录

  1. PTRACE_ATTACH和PTRACE_TRACEME都会往子进程发送SIGSTOP信号,如果我们修改了该程序对这个信号的反应,是不是可以防止attach?
  2. ptrace是遇到syscall就会中断下来把控制权交给父进程,所以下断点就是把相应地址的指令改成syscall或者int 80这类的指令。
Author

Hcamael

Posted on

2021-09-13

Updated on

2021-09-13

Licensed under