2016-02-11 105 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相同的效果 –