gpt4 book ai didi

c - POSIX:您如何确定您自己的进程的文件镜像以便您可以执行自己?

转载 作者:IT王子 更新时间:2023-10-29 00:35:45 28 4
gpt4 key购买 nike

<分区>

如何确定代表当前进程可执行文件的文件?

问题是 argv[0] 不可靠,就好像它是通过 execXp 调用的一样,满足非限定命令的路径条目可能也可能不被前置。此外,exec* 的任何调用者都可以用任何东西替换 argv[0]

因此,如果您运行 ps,则不能保证 argv[0] 将是 "/usr/bin/ps" .事实上,您可能会得到相反的结果。

我需要以下之一:

  1. 完整路径名(我自己不做路径搜索,以免我使用的 envp 不是 shell 使用的那个)
  2. 一个实时的、预先打开的文件描述符,指向对应于当前进程图像的文件
  3. 一些魔法描述符对应于当前内存中的代码段(虽然不太确定 BSS 段)

这样,在启动时我可以快速打开一个 FD 到我自己的可执行文件(对于情况 1.,以防文件被删除并变得无法打开),然后在更晚的日期调用:

int fexecve(int fd, char *const argv[], char *const envp[]);

fork/exec 我自己(在 OS-X 上通常需要解决 fork() )。换句话说(当然,这个例子很愚蠢):

void magicallyReplicate(argc, argv)
{
if (!fork()) {
magicallyExecMyself(argc, argv);
}
}

甚至只是:

void startOver(argc, argv)
{
magicallyExecMyself(argc, argv);
}

当然,在我的示例中,我将使用不同的 argv,以便我可以在不同的模式下运行。

(早期的“否”反驳:您不能使用 clone(),因为它是 fork() 的沿袭)

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com