本文共 638 字,大约阅读时间需要 2 分钟。
第一个参数决定了ptrace的行为与其它参数的使用方法,可取的值有:PTRACE_MEPTRACE_PEEKTEXTPTRACE_PEEKDATAPTRACE_PEEKUSER //取得与子进程相关的寄存器值orig_eax = ptrace(PTRACE_PEEKUSER, child, 4 * ORIG_EAX, NULL); PTRACE_POKETEXTPTRACE_POKEDATAPTRACE_POKEUSERPTRACE_GETREGS //可以只需一次函数调用就取得所有的相关寄存器值。PTRACE_GETFPREGS,//PTRACE_SETREGSPTRACE_SETFPREGSPTRACE_CONTPTRACE_SYSCALL, //使内核在子进程做出系统调用或者准备退出的时候暂停它PTRACE_SINGLESTEP //会使内核在子进程的每一条指令执行前先将其阻塞,然后将控制权交给父进程。ins = ptrace(PTRACE_PEEKTEXT, child, regs.eip, NULL); PTRACE_DETACH //使子进程继续运行下去PTRACE_TRACEME //附加PTRACE_ATTACH //附加并调试
设置断点 //原理通常是将当前将要执行的指令替换成trap指令
转载于:https://blog.51cto.com/haidragon/2113107