我想按名称获取函数的地址。如何按名称获取函数地址?
例如,目前我使用dlsym
:
unsigned long get_func_addr(const char *func_name)
{
return (unsigned long)dlsym(NULL, func_name);
}
然而,dlsym
仅适用于外部函数。它不适用于静态功能。我知道在不同的文件中可能会有多个具有相同名称的静态函数。但我需要至少得到一个静态函数的地址和名称。有时静态函数将被调入。但是,如果C文件是使用调试编译的,那么也可以。我认为与-g
,静态功能的符号表是存在的,但我怎么可以访问它?
我不想创建一个表来将字符串映射到函数地址。我需要找到一种动态的方法。
使用'stdint.h'中的'uintptr_t'而不是'unsigned long'。 –
你为什么想这样做?如果你能够保证带有静态模块是以调试模式编译的,你应该能够使该函数成为非静态的,或者为它添加一个简单的非静态包装器。 –
This SO question has some pointers to information on how to read debugging symbols:http://stackoverflow.com/q/5045430/12711 –