我正在尝试获取隐藏的C函数的函数名称,也就是未在图像的符号表中公开。
我在OS X上执行此操作并使用dladdr,当dladdr返回成功时,我检查dli_sname
字段,但是它为NULL。
有没有办法取回C函数名称?据我了解,未导出的C函数最终被内联?
答案 0 :(得分:3)
没有办法。
内联与否,如果它不在符号表中,如果它是使用调试信息构建的,那么其他任何地方的名称都不会被存储,即使这样,如果它被优化,它仍然有时很难或不可能恢复。
您可以使用例如转储符号表objdump如果你很好奇,那么通过dladdr你无法获得任何东西。
答案 1 :(得分:2)
未导入的函数不一定是内联的(否则您首先不会有函数地址),但它们不在符号表中,因此它们没有与之关联的名称。
除非您导出所有符号(例如GCC' s -export-dynamic
),否则无法获取名称,但我想如果您可以做的话,您不会首先询问那。如果它有调试信息,它可能会解析它以获得名称。