在不修改内核的情况下拦截系统调用的最小开销方式

pyt*_*nic 5 c linux gcc x86-64 system-calls

我所知道的拦截系统调用的方法如下。

  1. 使用ptrace,但这似乎有很高的开销。据我所知,像strace这样的工具也在内部使用ptrace。
  2. 使用内核模块来改变系统调用表,但据我所知,这种方法在后来的linux内核中不再可行。
  3. 使用 LD_PRELOAD。但是,如果例如您直接进行系统调用而不使用该系统调用的一些包装库函数,这将不起作用。

所以你看到上面提到的所有方法都有缺陷。所以我的问题是在不修改内核和最小开销的情况下拦截系统调用的方法是什么。

eca*_*mur 1

考虑使用动态检测框架,例如DTraceSystemTap。其中一项或两项都应适用于您的平台。