我想通过名称获取函数的地址。
例如,目前我正在使用dlsym
:
unsigned long get_func_addr(const char *func_name)
{
return (unsigned long)dlsym(NULL, func_name);
}
然而,dlsym
仅适用于外部函数。它不适用于静态函数。我知道不同文件中可能有多个具有相同名称的静态函数。但我至少需要获取一个静态函数的地址和名称。有时静态函数会被内联。但是如果C文件用debug编译就可以了。我认为与-g
,静态函数的符号表是存在的,但是如何访问它呢?
我不想创建一个用于将字符串映射到函数地址的表。我需要找到一种动态执行此操作的方法。
如果不以某种方式创建一些可用于查找的外部文件,这实际上是不可能的......例如,正如您所提到的,存在静态函数的符号表,但它是在编译/链接时生成的。 ..它不是可以从非编译代码模块访问的东西。
因此,基本上,您可以从编译和链接的可执行文件中生成符号表并将其导出为外部文件,然后使用一个函数来动态查找外部文件中的函数名称,该函数将提供获取函数地址所需的信息编译器和链接器将其编译/链接到的位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)