4

我知道如何使用dlsym()来查找由字符串键入的符号 - 当这些符号由我拥有的共享库导出时dlopen()编辑的共享库导出时。但是 - 其他代码呢?只是我静态链接的目标代码。是否有可能以某种方式查找符号?

笔记:

  • 如果有帮助,请对编译和链接过程做出任何合理的假设(例如,哪个编译器、调试信息的存在、PIC 代码等)
  • 我对非特定于操作系统的解决方案更感兴趣,但如果重要的话:Linux。
  • 涉及功能预注册的解决方案不相关。或者更确切地说,也许他们是,但我宁愿避免这种情况。
4

1 回答 1

3

您确实可以将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
$
于 2016-01-19T22:57:47.290 回答