gpt4 book ai didi

c++ - 如何从当前可执行文件中获取函数地址?

转载 作者:行者123 更新时间:2023-11-30 02:28:28 28 4
gpt4 key购买 nike

我需要知道 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/

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