【问题标题】:Override system call for my application only in debian仅在 debian 中覆盖我的应用程序的系统调用
【发布时间】:2015-05-26 18:11:28
【问题描述】:

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

我知道一种方法可以获取系统调用地址,然后从该地址跳转到不同的系统调用号。但是,这种方法的问题是,如果出现问题,我的系统将会关闭。

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

【问题讨论】:

  • 您能否以不同的方式链接应用程序,使用库来覆盖系统调用?我做了类似的事情来处理非标准的浮点格式。
  • @mpez0 你能举例说明一下吗

标签: c linux-kernel operating-system kernel debian


【解决方案1】:

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

#define rmdir(p) overridden_rmdir(p)

在链接路径的库中定义overridden_rmdir

如果由于某种原因您不能这样做,但仍然可以重新编译,您可以生成汇编器输出并对其进行编辑(与 sed 脚本一样)以包含您想要的修改。

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

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

希望这有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2019-03-02
    • 2013-04-12
    • 2016-08-26
    相关资源
    最近更新 更多