gpt4 book ai didi

linux - dlsym 如何从剥离的二进制库中成功导入函数?

转载 作者:太空狗 更新时间:2023-10-29 11:25:30 25 4
gpt4 key购买 nike

奇怪的是 dlsym 可以从剥离的二进制文件中导入函数。

谁能告诉我为什么/怎么做?

=== FILE: a.c ===
int a1() { return 1; }
int a2() { return 2; }
=== end of a.c ===

=== FILE: b.c ===
#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>

typedef int (*fint)();

fint dlsym_fint(void *handle, char *name)
{
fint x = (fint)dlsym(handle, name);
char *err = NULL;
if ((err = dlerror()) != NULL) {
printf("dlsym: %s\n", err);
exit(1);
}
return x;
}

int main()
{
void *dl = dlopen("a.so", RTLD_NOW);
fint a = NULL;
a = dlsym_fint(dl, "a1");
printf("%p: %d\n", a, a());
a = dlsym_fint(dl, "a2");
printf("%p: %d\n", a, a());
return 0;
}
=== end of b.c ===

$ gcc -shared -fPIC -o a.so a.c
$ nm a.so
...
00000000000004ec T a1
00000000000004f7 T a2
...

$ strip a.so
$ nm a.so
nm: a.so: no symbols

$ gcc -o b b.c -ldl

$ ./b
0x2aaaaaac74ec: 1
0x2aaaaaac74f7: 2

最佳答案

试试 readelf -s a.so。动态符号在 strip 之后仍然存在。

(或者只是切换到 nm -D a.so。)

关于linux - dlsym 如何从剥离的二进制库中成功导入函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6771725/

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