gpt4 book ai didi

linux - 为什么我不能在 Linux 中直接启动一个共享库?

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

$ chmod +x libsomelibrary.so
$ ./libsomelibrary.so
Segmentation fault

$ gcc -O2 http://vi-server.org/vi/bin/rundll.c -ldl -o rundll
$ ./rundll ./libsomelibrary.so main
(application starts normally)

如果 libsomelibrary.so 有可用的入口点,为什么我不能直接启动它?

rundll.c 很简单:

void* d = dlopen(argv[1], RTLD_LAZY);
void* m = dlsym(d, argv[2]);
return ((int(*)(int,char**,char**))m)(argc-2, argv+2, envp);

为什么在尝试加载二进制文件时内部不使用它?

最佳答案

main 不是内核或动态链接器识别的入口点 - 它在编译时由链接到可执行文件的启动代码调用(此类启动代码未链接到共享默认情况下的库)。

ELF 头包含起始地址。

关于linux - 为什么我不能在 Linux 中直接启动一个共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860219/

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