非动态加载代码的类似dlsym的功能?

时间:2016-01-19 22:44:08

标签: c reflection debug-symbols dlsym

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

备注:

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

1 个答案:

答案 0 :(得分: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;
}

编译:{{1​​}}

gcc -rdynamic -O2 dl.c -o dl -ldl