ptrace系统调用的基本原理是通过操作系统提供的接口,以PTRACE_ATTACH参数追踪目标进程,并以PTRACE_GETREGS、PTRACE_SETREGS、PTRACE_PEEKDATA、PTRACE_POKEDATA、PTRACE_SINGLESTEP、PTRACE_CONT等参数读取和修改目标进程的状态、内存和执行。具体步骤如下:ptrace启动跟踪子进程:ptrace系统调用以PTRACE_TRACEME参数启动一个子...
®s, sizeof(struct user_regs_struct));// 修改rip为mem_addr(shellcode的地址)regs.rip = (u_int64_t) mem_addr;regs.rip += 2// 设置tracee寄存器ptrace(PTRACE_SETREGS, tracee_pid, NULL, ®s)// 执行shellcode,假设shellcode结尾执行了getpid系统调用for (;;) { ptrace(PTRACE_SYSCALL...
getchar(); putdata(traced_process,regs.eip,backup,3);/**//*Setting the eip back to the original instruction to let the process continue*/ptrace(PTRACE_SETREGS,traced_process,NULL,®s); ptrace(PTRACE_DETACH,traced_process,NULL,NULL);return0;} 上面的程序将把三个byte的内容进行替换以执行tr...
13) PTRACE_SETREGS 形式:ptrace(PTRACE_SETREGS, pid, 0, data) 描述:设置寄存器值,pid表示被跟踪的子进程,data为用户数据地址。此功能将设置所有17个基本寄存器的值。 14) PTRACE_GETFPREGS 形式:ptrace(PTRACE_GETFPREGS, pid, 0, data) 描述:读取浮点寄存器值,pid表示被跟踪的子进程,data为用户变量地址...
函数原型 long ptrace(enum __ptrace_request request, pid_t pid, void *addr,void *data); 参数详解 主要是参数一 PTRACE_ATTACH,表示附加到指定远程进程 PTRACE_DETACH,表示从指定远程进程分离 PTRACE_GETREGS,表示读取远程进程当前寄存器环境 PTRACE_SETREGS,表示设置远程进程的寄存器环境 ...
ptrace(PTRACE_GETREGS, pid, 0, ®s); /* Is this system call permitted? */ int blocked = 0; if (is_syscall_blocked(regs.orig_rax)) { blocked = 1; regs.orig_rax = -1; // set to invalid syscall ptrace(PTRACE_SETREGS, pid, 0, ®s); ...
PTRACE_SETREGS:此命令用于设置远程进程的寄存器状态,将指定的结构体中的寄存器值复制到进程中 PTRACE_CONT:此命令用于使远程进程从暂停状态继续运行,可以指定一个信号参数来继续执行 PTRACE_PEEKTEXT:此命令用于从远程进程的指定内存地址读取一个 word 大小的数据,通常用于读取代码或数据 ...
上面的 PTRACE_GETREGS , PTRACE_SETREGS , 读写的寄存器 是 执行 主线程 的 CPU 的 寄存器 ; 5、单步调试 PTRACE_SYSCALL :每当发生系统调用时, 被调试进程暂停 , 将控制权交还给调试进程 ; PTRACE_SINGLESTEP :每当执行一条指令时 , 被调试进程暂停 , 将控制权交还给调试进程 ; 单步调试 ; ...
形式:ptrace(PTRACE_SETREGS, pid, 0, data) 描述:设置浮点寄存器值,pid表示被跟踪的子进程,data为用户数据地址。此功能将设置所有浮点协处理器387的所有寄存器的值。 代码分析 与Ptrace函数相关的代码: 1. sys_ptrace函数,完成ptrace系统调用的代码。 2. 为完成sys_ptrace功能所需调用的一些辅助函数,寄存器读写...
形式:ptrace(PTRACE_SETREGS, pid, 0, data) 描述:设置寄存器值,pid表示被跟踪的子进程,data为用户数据地址。此功能将设置所有17个基本寄存器的值。 14) PTRACE_GETFPREGS 形式:ptrace(PTRACE_GETFPREGS, pid, 0, data) 描述:读取浮点寄存器值,pid表示被跟踪的子进程,data为用户变量地址用于返回读到的数据。