我正在写一个工具。该工具的一部分将是它能够记录系统调用的参数。好吧,我可以ptrace
用于此目的,但ptrace
速度很慢。我想到的一个更快的方法是修改 glibc。但这变得越来越困难,因为 gcc 神奇地插入了自己的内置函数作为系统调用包装器,而不是使用 glibc 中定义的代码。使用-fno-builtin
也无济于事。
所以我想出了写一个共享库的想法,它包括每个系统调用包装器,例如mmap
然后在调用实际的系统调用包装器函数之前执行日志记录。例如mmap
下面给出了我的样子的伪代码。
int mmap(...)
{
log_parameters(...);
call_original_mmap(...);
...
}
然后我可以使用 LD_PRELOAD 首先加载这个库。你认为这个想法会奏效,还是我错过了什么?