我知道如何使用dlsym()
来查找由字符串键入的符号 - 当这些符号由我拥有的共享库导出时dlopen()
编辑的共享库导出时。但是 - 其他代码呢?只是我静态链接的目标代码。是否有可能以某种方式查找符号?
笔记:
- 如果有帮助,请对编译和链接过程做出任何合理的假设(例如,哪个编译器、调试信息的存在、PIC 代码等)
- 我对非特定于操作系统的解决方案更感兴趣,但如果重要的话:Linux。
- 涉及功能预注册的解决方案不相关。或者更确切地说,也许他们是,但我宁愿避免这种情况。
我知道如何使用dlsym()
来查找由字符串键入的符号 - 当这些符号由我拥有的共享库导出时dlopen()
编辑的共享库导出时。但是 - 其他代码呢?只是我静态链接的目标代码。是否有可能以某种方式查找符号?
笔记:
您确实可以将dlsym()
其用于此目的。您只需将所有符号导出到动态符号表即可。为此链接二进制文件gcc -rdynamic
。
例子:
#include <stdio.h>
#include <dlfcn.h>
void foo (void) {
puts("foo");
}
int main (void) {
void (*foo)(void) = dlsym(NULL, "foo");
foo();
return 0;
}
编译:gcc -rdynamic -O2 dl.c -o dl -ldl
$ ./dl
foo
$