是否访问用户或内核空间

Does ptrace access user or kernel space?

本文关键字:内核 空间 用户 访问 是否      更新时间:2023-10-16

我正在尝试通过以下C++代码读取 Aarch64 Linux 上进程/线程的进程/线程的指令指针/pc 寄存器,该进程/线程卡在系统调用中( = 内核土地):

ptrace( PTRACE_GETREGSET, threadProcessId, NULL, &regs );
printf( "Register dump: %lxn", regs.pc );

但是,打印出来的地址与/proc/threadProcessId/stack 返回的堆栈顶部的函数地址不同。它甚至似乎不在内核空间中。

我做错了什么吗?我可以通过这种方式访问内核部分电脑吗?

Ptrace 是从用户空间启动的,因此它只能访问 [用户进程] 的用户空间内存。内核空间由内核模块访问,可以插入我的insmod.Ptrace 的内核空间类似物是 Ftrace。