【Android安全】Ptrace原理

在Linux系统中,进程状态除了TASK_RUNNING,TASK_INTERRUPTIBLE,TASK_STOPPED等,还有一个TASK_TRACED。

ptrace提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值。

其基本原理是: 所有发送给被跟踪的子进程的信号(除了SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程的状态就会被系统标注为TASK_TRACED。
而父进程收到信号后,就可以对停止下来的子进程进行检查和修改,然后让子进程继续运行。

其原型为:

#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);

ptrace有四个参数:

1). enum __ptrace_request request:指示了ptrace要执行的命令。
2). pid_t pid: 指示ptrace要跟踪的进程。
3). void *addr: 指示要监控的内存地址。
4). void *data: 存放读取出的或者要写入的数据。

参考:https://www.cnblogs.com/tangr206/articles/3094358.html

猜你喜欢

转载自blog.csdn.net/qq_39441603/article/details/132041841
今日推荐