https://blog.csdn.net/pi9nc/article/details/28671873 ptrace的使用: http://www.xuebuyuan.com/3179050.html

第一个参数决定了ptrace的行为与其它参数的使用方法,可取的值有:
PTRACE_ME
PTRACE_PEEKTEXT
PTRACE_PEEKDATA

PTRACE_PEEKUSER //取得与子进程相关的寄存器值
orig_eax = ptrace(PTRACE_PEEKUSER,   child, 4 * ORIG_EAX, NULL); 
PTRACE_POKETEXT
PTRACE_POKEDATA
PTRACE_POKEUSER
PTRACE_GETREGS  //可以只需一次函数调用就取得所有的相关寄存器值。
PTRACE_GETFPREGS,//
PTRACE_SETREGS
PTRACE_SETFPREGS
PTRACE_CONT
PTRACE_SYSCALL, //使内核在子进程做出系统调用或者准备退出的时候暂停它
PTRACE_SINGLESTEP  //会使内核在子进程的每一条指令执行前先将其阻塞,然后将控制权交给父进程。
ins = ptrace(PTRACE_PEEKTEXT,   child, regs.eip,   NULL); 
PTRACE_DETACH       //使子进程继续运行下去
PTRACE_TRACEME  //附加
PTRACE_ATTACH      //附加并调试

设置断点 //原理通常是将当前将要执行的指令替换成trap指令