gpt4 book ai didi

c - 希望 execve() 运行的可执行文件使用我预加载的库

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

我正在执行一个程序 say A from another,首先是 fork-ing,然后是 execve()。现在的问题是我希望 A 使用我通常使用 LD_PRELOAD 来完成的库。我如何在 execve() 中执行此操作。

谢谢

最佳答案

您可以在 envp execve 的参数中传递 LD_PRELOAD:

被执行的程序,名为“run”:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char **argv)
{

printf("%s\n",getenv("LD_PRELOAD"));
}

执行 execve 的程序,名为“ex”:

#include <stdio.h>
#include <unistd.h>


int main(int argc, char **argv)
{
char *const args[] = {"./run",NULL};
char *const envs[] = {"LD_PRELOAD=caca",NULL};
execve("./run",args,envs);
}

运行它:

root@pinkpony:~# ./ex
ERROR: ld.so: object 'caca' from LD_PRELOAD cannot be preloaded: ignored.
caca

编辑:显示的错误被抛出,因为“caca”lib 不能预加载运行,所以它可以工作。 (为了清楚起见,我跳过了 fork() 部分,但用法是一样的)

编辑:做类似的事情:

LD_PRELOAD=caca ./ex

如果你没有通过 envp execve() 的参数传递 execve()-ing 运行时,将不会自动预加载 caca 库

关于c - 希望 execve() 运行的可执行文件使用我预加载的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6014391/

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