![有没有比 ptrace 更好的方法来拦截(“捕获”)来自分叉进程的 Linux 系统调用?](https://linux22.com/image/185628/%E6%9C%89%E6%B2%A1%E6%9C%89%E6%AF%94%20ptrace%20%E6%9B%B4%E5%A5%BD%E7%9A%84%E6%96%B9%E6%B3%95%E6%9D%A5%E6%8B%A6%E6%88%AA%EF%BC%88%E2%80%9C%E6%8D%95%E8%8E%B7%E2%80%9D%EF%BC%89%E6%9D%A5%E8%87%AA%E5%88%86%E5%8F%89%E8%BF%9B%E7%A8%8B%E7%9A%84%20Linux%20%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%EF%BC%9F.png)
我想捕获来自分叉进程的所有系统调用,修改它们,将它们发送到内核,然后将它们传递回分叉进程。这可能吗?如果可以,我该怎么办?
我做了一些研究,发现了 ptrace,但它看起来有点重,因为它做了很多事情(修改寄存器等......)。不过,如果我错了,请纠正我。
答案1
如果你可以等待5.11版本的内核,它将会有一种新的系统调用拦截机制专为快速(或不太慢)模拟系统调用而设计。最初的用例是针对 Wine,但它也可用于其他目的,只要信号处理程序可以工作(它依赖于SIGSYS
)。
我想捕获来自分叉进程的所有系统调用,修改它们,将它们发送到内核,然后将它们传递回分叉进程。这可能吗?如果可以,我该怎么办?
我做了一些研究,发现了 ptrace,但它看起来有点重,因为它做了很多事情(修改寄存器等......)。不过,如果我错了,请纠正我。
如果你可以等待5.11版本的内核,它将会有一种新的系统调用拦截机制专为快速(或不太慢)模拟系统调用而设计。最初的用例是针对 Wine,但它也可用于其他目的,只要信号处理程序可以工作(它依赖于SIGSYS
)。