C 仅在debian中覆盖我的应用程序的系统调用

C 仅在debian中覆盖我的应用程序的系统调用,c,linux-kernel,operating-system,kernel,debian,C,Linux Kernel,Operating System,Kernel,Debian,我有一个要求,我想在我运行的线程中拦截系统调用并记录该信息。我的内核版本是3.15.10 我知道一种方法,在那里我可以得到系统呼叫地址,然后从该地址跳转到不同的系统呼叫号码。但是,这种方法的问题是,如果出了什么问题,我的系统就会停机 我想要的是仅覆盖我的应用程序的系统调用如果您有应用程序的源并且可以重新编译,那么您可以使用宏定义将系统调用更改为可以覆盖的其他调用(通常是原始系统调用) 使用链接路径中的库中定义的覆盖\u rmdir 如果由于某种原因不能这样做,但仍然可以重新编译,则可以生成汇编程

我有一个要求,我想在我运行的线程中拦截系统调用并记录该信息。我的内核版本是3.15.10

我知道一种方法,在那里我可以得到系统呼叫地址,然后从该地址跳转到不同的系统呼叫号码。但是,这种方法的问题是,如果出了什么问题,我的系统就会停机


我想要的是仅覆盖我的应用程序的系统调用

如果您有应用程序的源并且可以重新编译,那么您可以使用宏定义将系统调用更改为可以覆盖的其他调用(通常是原始系统调用)

使用链接路径中的库中定义的
覆盖\u rmdir

如果由于某种原因不能这样做,但仍然可以重新编译,则可以生成汇编程序输出并对其进行编辑(就像使用
sed
脚本一样),以包含所需的修改

如果无法重新编译或重新链接,则可以反汇编二进制文件并编辑汇编程序输出,如上所述

另一种可能是在具有不同内核的虚拟机中运行此应用程序,其中内核被修改为使用覆盖的系统调用

#define rmdir(p) overridden_rmdir(p)

希望这会有所帮助。

您可以使用库覆盖系统调用,以不同的方式链接应用程序吗?我做了一些类似于处理非标准浮点格式的操作。@mpez0您能用示例详细说明一下吗