ptrace追踪目标进程:ptrace系统调用以PTRACE_ATTACH参数追踪目标进程,将目标进程的状态切换到被跟踪状态,并向目标进程发送SIGSTOP信号,暂停其执行。ptrace读取目标进程状态:ptrace系统调用以PTRACE_GETREGS参数读取目标进程状态,包括寄存器、程序计数器等信息。ptrace修改目标进程状态:ptrace系统调用以PTRACE_SETREGS参数修改...
PTRACE_SYSCALL:继续跟踪,但是在下一下系统调用入口或出口时停止。 PTRACE_GETREGS:取得被跟踪进程的寄存器内容副本。 另外两个字段,addr和data,作为所选的 Ptrace 函数的一般参数。一般情况下,可以忽略一个或全部忽略,在那种情况下,传递零个参数。 strace 接口实质上是前缀到另一个命令之前。 $ strace [strace opti...
ptrace(PTRACE_GETREGS,traced_process,NULL,®s);/**//*Copy instructions into a backup variable*/getdata(traced_process,regs.eip,backup,3);/**//*Put the breakpoint*/putdata(traced_process,regs.eip,code,3);/**//*Let the process continue and execute the int3instruction*/ptrace(PTRACE_CON...
如果你想在系统调用开始前或结束后读取多个寄存器的值,上面的代码实现起来会比较麻烦,ptrace提供了另一种方式来一次性读取所有的寄存器的内容,这就是参数:PTRACE_GETREGS的作用。参看下面的例子: #include <sys/ptrace.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <linux/...
PTRACE_GETREGS,PTRACE_GETFPREGS,PTRACE_SETREGS,PTRACE_SETFPREGS——调试器用来读写被调试进程的当前的寄存器/浮点寄存器; PTRACE_SYSCALL, PTRACE_SINGLESTEP, PTRACE_CONT——当被调试进程进行系统调用的时候和之后,停下该进程执行;控制单步执行指令;继续运行被调试进程; ...
而宏WIFEXITED则表示了子进程是否正常结束(例如通过调用exit或者从main返回等),正常结束时返回true。 (3)系统调用参数-改进版 前面有介绍PTRACE_GETREGS参数,使用它来获取寄存器的值相比前面一种方法要简单很多:
上面的 PTRACE_GETREGS , PTRACE_SETREGS , 读写的寄存器 是 执行 主线程 的 CPU 的 寄存器 ; 5、单步调试 PTRACE_SYSCALL : 每当发生系统调用时, 被调试进程暂停 , 将控制权交还给调试进程 ; PTRACE_SINGLESTEP : 每当执行一条指令时 , 被调试进程暂停 , 将控制权交还给调试进程 ; 单步调...
PTRACE_GETREGS 读取寄存器 PTRACE_SETREGS 设置寄存器 PTRACE_GETFPREGS 读取浮点寄存器 PTRACE_SETFPREGS 设置浮点寄存器 1.3函数返回值 成功返回0。错误返回-1。errno被设置。 错误 EPERM 特殊进程不可以被跟踪或进程已经被跟踪。 ESRCH 指定的进程不存在
PTRACE_GETREGS 读取所有寄存器的值 PTRACE_CONT 继续执行示被跟踪的子进程,signal为0则忽略引起调试进程中止的信号,若不为0则继续处理信号signal。 PTRACE_SETREGS 设置寄存器 PTRACE_DETACH 结束跟踪 用ptrace来实现gdb调试原理: #include<sys/ptrace.h>#include<sys/types.h>#include<sys/wait.h>#include<unistd...