0

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

4

4 回答 4

4

没关系——愚蠢的错误。

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

于 2009-05-29T01:08:36.747 回答
2

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

于 2009-05-29T00:34:22.107 回答
2

如果它对写作开放,它很可能会通过该creat功能(我猜fopen会将您重定向到那里)。检查您fcntl.h的完整列表。

于 2009-05-29T00:38:51.193 回答
1

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

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

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

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

于 2009-05-29T00:34:22.497 回答