linux ptrace系统调用探究
1. ptrace 函数简介 Ptrace是一个系统调用,它提供了一种方法来让‘父’进程可以观察和控制其它进程的执行,检查和改变其核心映像以及寄存器。 主要用来实现断点调试和系统调用跟踪。利用ptrace函数,不仅可以劫持另一个进程的调用,修改系统函数调用和改变返回值,而且可以向另一个函数注入代码,修改eip,进入自己的逻辑。这个函数广泛用于调试和信号跟踪工具。 ptrace使用场景: 由于ptrace可以跟踪运行进程并修改寄存器与内存,因此可以用于以下用途。 黑客利用该特性进行代码注入。 不退出进程,进行在线升级。 开发追踪调试工具。 函数定义 #include <sys/ptrace.h> long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); 函数参数解释 request:请求执行的行为,可能选择有 PTRACE_TRACEME //指示父进程跟踪某个子进程的执行。任何传给子进程的信号将导致其停止执行,同时父进程调用wait()时会得到通告。之后,子进程调用exec()时,核心会给它传送SIGTRAP信号,在新程序开始执行前,给予父进程控制的机会。pid, addr, 和 data参数被忽略。 PTRACE_PEEKTEXT, PTRACE_PEEKDATA /