2016-02-11 106 views
0

在共享库文件中生成的符号名称如何显示?例如,使用elfread -ws读取该文件libutils.so符号(Android系统utils的库)的时候,我得到了格式的几个符号名称:如何在.so(共享库)文件中生成符号名称?

_ZN7android10VectorImpl14insertVectorAtERKS0_j 

等你如何破解这个符号名?

回答

2

这似乎是一种错位的名称,例如,对于C++,你可以使用-C选项nm让那些更有意义:

-C
--demangle [=风格]
将低级别符号名称解码(demangle)为用户级名称。除了删除由系统预设的任何初始下划线外,这使得C++函数名称可读。不同的编译器有不同的移动样式。可选的demangling样式参数可用于为编译器选择合适的demangling样式。有关demangling的更多信息,请参见c++filt

当使用共享库nm,这个选项显示它们的符号:

-D
--dynamic
显示的动态码元而不是正常的符号。这只对动态对象有意义,比如某些类型的共享库。

+0

libutils.so是elf格式,所以nm不报告符号。 – shaveenk

+0

@shaveenk您可以将'readelf'的输出管道输送到'C++ filt',以达到与nm-C相同的效果 –