【问题标题】:Problem replacing Linux system calls using LD_PRELOAD使用 LD_PRELOAD 替换 Linux 系统调用时出现问题
【发布时间】:2009-05-29 00:26:30
【问题描述】:

我正在尝试编写一个允许运行二进制文件的程序,并在请求时将某个文件替换为另一个文件。它是一个简单替换系统调用函数的库,与 LD_PRELOAD 一起使用。问题是它会捕获打开读取(替代文件被读取),但写入总是回到实际的指定文件。还有其他我应该知道的“开放”系统调用吗?

【问题讨论】:

  • 您是否尝试过跟踪二进制文件以查看写入的文件描述符以及该 fd 来自何处?

标签: c linux system-calls library-interposition


【解决方案1】:

没关系——愚蠢的错误。

没有同时检查绝对路径和相对路径...

【讨论】:

    【解决方案2】:

    我不确定您的问题的原因是什么,但在您的程序上使用 strace 可能会提供一些见解。它应该是任何健全的 Linux 发行版的一部分。

    【讨论】:

      【解决方案3】:

      如果它对写作开放,它很可能会通过creat 函数(我猜fopen 会将你重定向到那里)。查看您的fcntl.h 以获取完整列表。

      【讨论】:

        【解决方案4】:

        在请求时用另一个文件替换某个文件

        听起来你只检查输入文件(你检查文件名吗?)。您还需要检查并替换输出文件。

        如果您的输出转到标准输出之一,那么您需要在 fork 到可执行文件之前关闭并使用输出替代品重新打开它们。

        要查找可执行文件进行的所有系统调用,您可以使用strace
        要查找可执行文件进行的所有库调用,您可以使用ltrace

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-17
          • 1970-01-01
          • 2012-01-07
          • 2020-09-21
          • 2016-05-25
          • 2012-09-19
          • 2022-01-10
          相关资源
          最近更新 更多