这是拦截系统调用的好方法吗?

Met*_*est 12 c linux gcc glibc x86-64

我正在写一个工具.该工具的一部分是它能够记录系统调用的参数.好吧,我可以ptrace用于此目的,但ptrace速度很慢.我想到的一种更快的方法是修改glibc.但这变得越来越困难,因为gcc神奇地将自己的内置函数作为系统调用包装器插入,而不是使用glibc中定义的代码.使用-fno-builtin也没有帮助.

所以我提出了编写共享库的想法,其中包括每个系统调用包装器,例如mmap然后在调用实际系统调用包装器函数之前执行日志记录.例如,mmap下面给出了我的样子的伪代码.

int mmap(...)
{
 log_parameters(...);
 call_original_mmap(...);
 ...
}
Run Code Online (Sandbox Code Playgroud)

然后我可以使用LD_PRELOAD首先加载这个库.你觉得这个想法会起作用,还是我错过了什么?

Joe*_*mob 0

来自用户空间的所有系统调用都会通过中断处理程序切换到内核模式,如果您找到此处理程序,您可能可以在其中添加一些内容。

\n\n

编辑我发现这个http://cateee.net/lkddb/web-lkddb/AUDITSYSCALL.html。Linux 内核:2.6.6\xe2\x80\x932.6.39、3.0\xe2\x80\x933.4 支持系统调用审计。这是必须启用的内核模块。如果不令人困惑的话,也许您可​​以查看该模块的源代码。

\n

  • LSM 也可用于控制系统调用。http://en.wikipedia.org/wiki/Linux_Security_Modules (2认同)