代码调试器功能 :
上述所有操作 , 都是通过调用 ptrace 方法完成的 , 只是传入不同的参数 , 执行不同的操作 ;
参考 【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 ) 博客 ;
进程 A 调试 进程 B , 首先要 attach 进程 B , attach 操作需要指定 进程 B 的 进程号 PID ;
进程 ID 在当前系统运行时是唯一的 ; 进程 B 每次启动时 , 进程号是随机分配的 , 值并不固定 ;
PID 进程号的取值范围 0 ~ 32767 ; 上限是 65535 一半 ;
一般情况下 1000 以下的进程号 , 是系统进程使用的 ;
以 非 root 权限执行的进程 , 都是 1000 以上的进程号 ;
Attach 进程代码 : PTRACE_ATTACH 参数表示该函数操作是 Attach 被调试进程 , nPid 参数为 进程 PID ;
ptrace(PTRACE_ATTACH, nPid, NULL, 0)
ptrace 函数参考文档 : https://man7.org/linux/man-pages/man2/ptrace.2.html