我想按名稱獲取函數的地址。如何按名稱獲取函數地址?
例如,目前我使用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 –