我需要知道 Solaris 10 上使用 C++ 的当前可执行文件的函数地址(我使用的是 GNU g++ 4.9.2)。例如,我有一个函数说:void doSomething(const char *p),它可能会也可能不会在当前可执行文件中定义。所以,我想在当前可执行文件中搜索该函数,如果存在,则调用它做一些默认操作。我怎么做? dlsym 会有帮助吗? 请帮助我了解语法和损坏的名称。
最佳答案
您可以通过运行 nm exec
获取可执行文件中的符号列表。或者,如果您尝试从共享库中获取符号,您也可以nm
符号库。选择你想要的那个,然后用类似...的东西加载它
void* handle = dlopen(NULL, RTLD_LAZY);
void* ptr = dlsym(handle, "mangled_name_you_got_from_nm");
尽管您可能希望通过类似(显然,更改为适当的函数指针类型)之类的方式将其转换为正在加载的函数的函数指针类型...
void* handle = dlopen(NULL, RTLD_LAZY);
auto ptr = reinterpret_cast<int(*)(int)>(dlsym(handle, "mangled_name_you_got_from_nm"));
关于c++ - 如何从当前可执行文件中获取函数地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40733918/