ptrace在用户级还是内核级工作?

ptrace在用户级还是内核级工作?,c,system-calls,strace,ptrace,C,System Calls,Strace,Ptrace,我正在尝试使用ptrace实现数据流异常检测。经过一点研究,我实现了一个类似于strace的程序。现在,我对此感到困惑,这是维基告诉我的关于系统调用的内容: “系统调用提供进程和操作系统之间的接口” 当我使用ptrace修改进程的内存时,我是在使用用户空间还是内核空间?对此我真的很困惑。您正在一个单独进程的地址空间中操作;这需要内核的交互(以及来自内核的许可),因为独立进程通常不会影响彼此的地址空间。实际上ptrace会为每个系统调用生成一个int 0x80,对吗?所以我在处理一个中断,所以我在

我正在尝试使用ptrace实现数据流异常检测。经过一点研究,我实现了一个类似于strace的程序。现在,我对此感到困惑,这是维基告诉我的关于系统调用的内容:

“系统调用提供进程和操作系统之间的接口”


当我使用ptrace修改进程的内存时,我是在使用用户空间还是内核空间?对此我真的很困惑。

您正在一个单独进程的地址空间中操作;这需要内核的交互(以及来自内核的许可),因为独立进程通常不会影响彼此的地址空间。

实际上ptrace会为每个系统调用生成一个
int 0x80
,对吗?所以我在处理一个中断,所以我在内核空间,对吗?这是我的第一个想法。我错了吗?不完全是这样,它可以在进行系统调用时停止进程(对于Intel上的Linux,它已经是
int0x80
),但它也可以简单地检查进程内存或寄存器。但是,任何这些都不能由另一个进程直接对一个进程执行;第二个进程必须要求内核对第一个进程进行操作,这就是
ptrace
所做的。因此,如果我想直接在内核空间中操作,我应该怎么做?这通常是不允许的,因为它具有相当严重的安全性影响。保护和验证对内核功能的访问(归根结底,这是对系统的完全控制)是系统调用的重点。如果你真的想做内核级的操作,你应该创建一个新的系统调用来将这些操作暴露给用户空间,最好使用访问控制,这样一个有缺陷的用户空间进程就不会损坏其他进程(或者更糟的是,内核自己的或者某些设备的)内存。