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指令