【问题标题】:Is it possible to change the value of "/proc/self/exe" for an exec'ed child process?是否可以为已执行的子进程更改“/proc/self/exe”的值?
【发布时间】:2018-08-11 15:48:54
【问题描述】:

我正在尝试使用exec 系统调用来启动另一个可执行文件,但该可执行文件在/proc/self/exe 上使用readlink() 来确定其文件位置。我希望它认为它与父可执行文件具有相同的位置,但它决定了它的实际位置。我认为我可以通过使用LD_PRELOAD 拦截readlink() 调用来完成类似的事情,但是有没有更简单或更直接的方法来完成这个?我只寻找可以在父可执行文件中实现的解决方案,修改子文件不是一种选择。

【问题讨论】:

  • 为什么要关心作为进程运行的二进制文件的位置是什么?提示:尝试从命令行运行ls -l /proc/self/exe
  • 因为子进程正在寻找相对于它自己位置的文件,我希望它在其他地方寻找文件。 “提示”应该有用吗?
  • 您可以尝试在自己的目录中使用硬链接。这可能需要 root 权限。
  • 修改程序,让它在被告知的地方寻找,只作为最后的手段(或者,作为默认的正常行为 - 您选择术语)退回/proc/self/exe?您可以通过命令行参数、环境变量或配置 (ini) 文件指定替代方案 - 都是可能的。
  • 正如问题“修改孩子不是一种选择”中所述。这不是我的代码。

标签: c linux exec readlink


【解决方案1】:

创建可执行文件的链接:


$sudo ln /bin/ls ./ls
[sudo] password for plasser: 

# check it:
$ls -l ls
-rwxr-xr-x 2 root root 110080 mrt 10  2016 ls

#call it:
$./ls -l /proc/self/exe
lrwxrwxrwx 1 plasser uri 0 mrt  3 18:36 /proc/self/exe -> /home/plasser/krant/ls
$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    相关资源
    最近更新 更多