【问题标题】:How is a symbol name generated in a .so (shared library) file?如何在 .so(共享库)文件中生成符号名称?
【发布时间】:2016-02-11 01:39:38
【问题描述】:

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

_ZN7android10VectorImpl14insertVectorAtERKS0_j 

等等。你如何破译这个符号名称?

【问题讨论】:

    标签: android linux shared-libraries


    【解决方案1】:

    这似乎是一个错误的名称,例如,对于 C++,您可以更好地理解那些使用 nm-C 选项的名称:

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

    在共享库上使用nm 时,此选项会显示它们的符号:

    -D
    --dynamic
    显示动态符号而不是普通符号。这仅对动态对象有意义,例如某些类型的共享库。

    【讨论】:

    • libutils.so 是 elf 格式,因此 nm 不报告任何符号。
    • @shaveenk 您可以将输出从readelf 传送到c++filt 以达到与nm -C 相同的效果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多