我要求我在运行的线程中拦截系统调用并记录该信息。我的内核版本是3.15.10
我知道一种方法,我可以获得系统调用地址,然后跳转到该地址的不同系统调用号码。但是,这种方法的问题是如果出现问题我的系统将会崩溃。
我想要的是仅覆盖我的应用程序的系统调用
答案 0 :(得分:1)
如果您拥有应用程序的源代码并且可以重新编译,则可以使用宏定义将系统调用更改为覆盖其他内容(通常是原始系统调用)。
#define rmdir(p) overridden_rmdir(p)
在链接路径的库中定义overridden_rmdir
。
如果由于某种原因无法执行此操作,但仍可以重新编译,则可以生成汇编器输出并对其进行编辑(与sed
脚本一样)以包含所需的修改。
如果您无法重新编译或重新链接,您可能可以反汇编二进制文件并编辑汇编程序输出,如上所述。
另一种可能性是在具有不同内核的虚拟机中运行此应用程序,其中内核被修改为使用被覆盖的系统调用。
希望这有用。