从指定的指针编译代码中获取未导出的C函数名称。

时间:2016-08-27 13:52:38

标签: c macos linker symbols

我正在尝试获取隐藏的C函数的函数名称,也就是未在图像的符号表中公开。

我在OS X上执行此操作并使用dladdr,当dladdr返回成功时,我检查dli_sname字段,但是它为NULL。

有没有办法取回C函数名称?据我了解,未导出的C函数最终被内联?

2 个答案:

答案 0 :(得分:3)

没有办法。

内联与否,如果它不在符号表中,如果它是使用调试信息构建的,那么其他任何地方的名称都不会被存储,即使这样,如果它被优化,它仍然有时很难或不可能恢复。

您可以使用例如转储符号表objdump如果你很好奇,那么通过dladdr你无法获得任何东西。

答案 1 :(得分:2)

未导入的函数不一定是内联的(否则您首先不会有函数地址),但它们不在符号表中,因此它们没有与之关联的名称。

除非您导出所有符号(例如GCC' s -export-dynamic),否则无法获取名称,但我想如果您可以做的话,您不会首先询问那。如果它有调试信息,它可能会解析它以获得名称。