【问题标题】:Does ptrace work in user level or kernel level?ptrace 是在用户级别还是内核级别工作?
【发布时间】:2012-04-23 09:47:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: c system-calls strace ptrace


    【解决方案1】:

    你在一个单独的进程的地址空间中操作;这需要内核的调解(和许可),因为独立的进程通常不能影响彼此的地址空间。

    【讨论】:

    • 实际上 ptrace 会为每个系统调用生成一个int 0x80 对吧?所以我正在处理一个中断,所以我在内核空间中对吗?这是我的第一个想法。我错了吗?
    • 不完全是,它可以在 it 进行系统调用时停止进程(对于 Intel 上的 Linux 已经是 int 0x80),但它也可以简单地检查进程内存或寄存器。然而,这些中的任何一个都不能由另一个进程直接对一个进程执行;第二个进程必须要求内核对第一个进程采取行动,这就是 ptrace 所做的。
    • 那么如果我想直接在内核空间中操作应该怎么办??
    • 这通常是不允许的,因为它具有相当严重的安全隐患。保护和验证对内核功能的访问(也就是说,当涉及到它时,完全控制系统)是系统调用的point。如果您真的想做内核级操作,您将创建一个新的系统调用以将这些操作公开给用户空间,最好使用访问控制,这样有问题的用户空间进程就不会损坏其他进程(或更糟的是内核自己的或某些设备的)记忆。
    猜你喜欢
    • 2015-04-08
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2020-11-26
    • 2014-08-09
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多