ptrace修改目标进程状态:ptrace系统调用以PTRACE_SETREGS参数修改目标进程状态,包括寄存器、程序计数器等信息。ptrace读取目标进程内存:ptrace系统调用以PTRACE_PEEKDATA参数读取目标进程的内存数据。ptrace修改目标进程内存:ptrace系统调用以PTRACE_POKEDATA参数修改目标进程的内存数据。ptrace单步执行目标进程:ptrace系统调用以...
PTRACE_PEEKTEXT PTRACE_POKETEXT PTRACE_CONT PTRACE_SINGLESTEP pid:指定要跟踪的进程PID。 addr:指定要读取或者修改的内存地址。 data:对于不同的 request 操作,data 有不同的作用,下面会介绍。 前面介绍过,使用 strace 跟踪进程有两种方式,一种是通过 strace 命令启动进程,另外一种是通过 -p 指定要跟踪的进程。
这里详细介绍下ptrace系统调用中的参数request,通过该参数,ptrace为用户态提供了丰富的进程调试跟踪功能。 1)PTRACE_TRACEME 允许当前进程被其父进程跟踪,通常用于GDB加载运行一个被调试程序; 2)PTRACE_PEEKTEXT 读取目标进程的代码段内容,通常用于GDB查看目标进程的指令代码; 3)PTRACE_PEEKDATA 读取目标进程的数据段内...
switch (request) { case PTRACE_PEEKTEXT: case PTRACE_PEEKDATA: { unsigned long tmp; int copied; copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0); ret = -EIO; if (copied != sizeof(tmp)) break; ret = put_user(tmp, (unsigned long *)data); break; } ... } 从...
从执行结果来看,现在可以打印系统调用的名字了,但我们知道strace命令还会打印系统调用参数的值,我们可以通过ptrace()系统调用的PTRACE_PEEKTEXT和PTRACE_PEEKDATA来获取参数的值,所以有兴趣的就自己实现这个效果了。 #include <sys/ptrace.h>#include <sys/user.h>#include <unistd.h>#include <stdlib.h>#include ...
读取进程数据权限 :PTRACE_PEEKTEXT、PTRACE_PEEKDATA、PTRACE_PEEKUSER 写入进程数据权限 :PTRACE_POKETEXT、PTRACE_POKEDATA、PTRACE_POKEUSER 注意: 读写内存时 , 尽量在进程挂起后读写 , 否则内存数据不可靠 ; 4、进程对应的主线程寄存器读写 读取寄存器 :PTRACE_GETREGS ...
目录ptrace描述 ptrace用法 PTRACE_TRACEME PTRACE_PEEKTEXT、PTRACE_PEEKDATA PTRACE_POKETEXT、PTRACE_POKEDATA TRACE_PEEKUSR PTRACE_POKEUSR PTRACE_CONT PTRACE_SYSCALL PTRACE_KILL PTRACE_SINGLESTEP PTRACE_ATTACH ...通过ptrace跟踪进程 项目地址 https://gitee.com/bunner/linux-binary-analysis 1. 任务环境与...
使用ptrace函数传入PTRACE_PEEKDATA参数和目标进程的内存地址,可以读取目标进程的内存数据。 可以使用循环和适当的偏移量,读取目标进程的连续内存区域。 使用ptrace函数传入PTRACE_DETACH参数,将当前进程从目标进程上分离。 需要注意的是,使用ptrace读取其他进程的内存是一种高级操作,需要具备足够的权限。此外,由于ptrac...
ptrace(PTRACE_PEEKTEXT, m_nPid, (void*)pRemoteAddr, 0); 1. 传入的第一个参数可以是 PTRACE_PEEKTEXT / PTRACE_PEEKDATA / PTRACE_PEEKUSER , 这三个参数效果相同 ; 传入的第二个参数是 进程号 PID , ptrace 函数可以同时调试多个进程 ;