使用LD_PRELOAD替换Linux系统调用时出现问题

时间:2009-05-29 00:26:31

标签: c linux system-calls library-interposition

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

4 个答案:

答案 0 :(得分:4)

没关系 - 愚蠢的错误。

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

  

在请求时用另一个

替换某个文件

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

如果输出转到其中一个标准输出,那么在分叉到可执行文件之前,需要关闭并用输出替换它们重新打开它们。

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