【发布时间】:2018-08-11 15:48:54
【问题描述】:
我正在尝试使用exec 系统调用来启动另一个可执行文件,但该可执行文件在/proc/self/exe 上使用readlink() 来确定其文件位置。我希望它认为它与父可执行文件具有相同的位置,但它决定了它的实际位置。我认为我可以通过使用LD_PRELOAD 拦截readlink() 调用来完成类似的事情,但是有没有更简单或更直接的方法来完成这个?我只寻找可以在父可执行文件中实现的解决方案,修改子文件不是一种选择。
【问题讨论】:
-
为什么要关心作为进程运行的二进制文件的位置是什么?提示:尝试从命令行运行
ls -l /proc/self/exe。 -
因为子进程正在寻找相对于它自己位置的文件,我希望它在其他地方寻找文件。 “提示”应该有用吗?
-
您可以尝试在自己的目录中使用硬链接。这可能需要 root 权限。
-
修改程序,让它在被告知的地方寻找,只作为最后的手段(或者,作为默认的正常行为 - 您选择术语)退回
/proc/self/exe?您可以通过命令行参数、环境变量或配置 (ini) 文件指定替代方案 - 都是可能的。 -
正如问题“修改孩子不是一种选择”中所述。这不是我的代码。