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

标签 c linux gcc x86-64 system-calls

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

最佳答案

使用 C 宏。它是这样工作的:

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

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

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

关于c - 在没有 LD_PRELOAD 的情况下在用户级别拦截系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10515517/

相关文章:

c - 在 C 中验证整数值

linux - 在对方接受请求之前防止写入套接字

c - 尝试将 memset() 结构指针指向 0 时出现段错误

c - 确定设置了字节中的哪一位

Linux 根据目录中的另一个文件重命名文件?

android - 找不到 monkeyrunner 命令

C++运行时错误?如何解决这个问题并检查?

c - 错误: cannot use an address to initialize a field of a packed struct (#pragma pack)

c++ - g++ "is not a type"错误

计算 C 源代码中忽略注释和空行的行数