¿Cómo se generan los nombres que aparecen para un símbolo en un archivo de biblioteca compartida? Por ejemplo, cuando uso elfread -Ws para leer los símbolos en el archivo libutils.so (biblioteca de utilidades del sistema Android), obtengo varios nombres de símbolos del formato:
_ZN7android10VectorImpl14insertVectorAtERKS0_jetc. ¿Cómo se descifra el nombre de este símbolo?
Ese parece ser un nombre distorsionado, por ejemplo, para C ++, y puede entender mejor a aquellos que usan la opción -C de nm :
-C
--demangle[=estilo]
Decodificar (descomponer) nombres de símbolos de bajo nivel en nombres de nivel de usuario. Además de eliminar cualquier guión bajo inicial antepuesto por el sistema, esto hace que los nombres de las funciones de C++ sean legibles. Los diferentes compiladores tienen diferentes estilos de manipulación. El argumento de estilo de desmantelamiento opcional se puede usar para elegir un estilo de desmantelamiento apropiado para su compilador. Consulte c++filt para obtener más información sobre la eliminación.
Cuando se usa nm en bibliotecas compartidas, esta opción muestra sus símbolos:
-D
--dynamic
Muestre los símbolos dinámicos en lugar de los símbolos normales. Esto solo es significativo para objetos dinámicos, como ciertos tipos de bibliotecas compartidas.