在没有LD_PRELOAD的情况下在用户级拦截系统调用

时间:2012-05-09 11:51:21

标签: c linux gcc x86-64 system-calls

在我的程序中,我希望在同一进程中拦截用户级别的每个系统调用(我不想使用ptrace之类的单独进程或strace之类的工具)。我也不想使用LD_PRELOAD。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:4)

使用C宏。它的工作原理如下:

  1. 创建一个头文件,为您要跟踪的每个系统调用定义一个宏。示例:open()

    #define open(path,flags,mode)  mySpecialOpen(path,flags,mode)
    
  2. 创建一个包含mySpecial*()函数的库,该函数将调用转发给系统调用。编译没有头文件的库。

  3. 使用上面的头文件编译您的代码(以及您使用的所有库)。与图书馆联系。