PTRACE_PEEKUSER 读取 RAX寄存器值的示例代码
时间: 2024-02-22 19:55:44 浏览: 114
读取寄存器工具
下面是一个使用 `PTRACE_PEEKUSER` 读取 `RAX` 寄存器值的示例代码:
```c
#include <sys/ptrace.h>
#include <sys/user.h>
int main() {
pid_t pid = 1234; // 目标进程的PID
struct user_regs_struct regs;
// 使用ptrace附加到目标进程
if (ptrace(PTRACE_ATTACH, pid, NULL, NULL) < 0) {
perror("ptrace attach");
return -1;
}
// 等待目标进程停止
wait(NULL);
// 获取目标进程的RAX寄存器值
long rax = ptrace(PTRACE_PEEKUSER, pid, 8 * RAX, NULL);
if (rax < 0) {
perror("ptrace peekuser");
return -1;
}
// 打印RAX寄存器的值
printf("RAX = %lx\n", rax);
// 使用ptrace从目标进程中分离
if (ptrace(PTRACE_DETACH, pid, NULL, NULL) < 0) {
perror("ptrace detach");
return -1;
}
return 0;
}
```
需要注意的是,`RAX` 对应的偏移量是 `8 * RAX`。
阅读全文