¿Cómo hacer una lista de las funciones disponibles, etc. contenidas dentro de una biblioteca compilada?

StackOverflow https://stackoverflow.com/questions/392142

  •  23-08-2019
  •  | 
  •  

Pregunta

¿Cómo se determina si existe una función dentro de una biblioteca, o una lista de las funciones de una biblioteca compilada?

¿Fue útil?

Solución

Puede utilizar el nm comando para listar los símbolos en estático bibliotecas.

nm -g -C <libMylib.a>

Otros consejos

Para binarios ELF, puede utilizar readelf:

readelf -sW a.out | awk '$4 == "FUNC"' | c++filt

-s: símbolos de lista -W: no corte nombres demasiado largos

El comando awk filtrará entonces todas las funciones, y c ++ filt se unmangle ellos. Eso significa que los convertirá a partir de un esquema de denominación interna modo que se muestren en forma legible por humanos. Se da salida a nombres similares a este (tomado de lib boost.filesystem):

285: 0000bef0    91 FUNC    WEAK   DEFAULT   11 boost::exception::~exception()

Sin filt c ++, el nombre se muestra como _ZN5boost9exceptionD0Ev

Para las herramientas de Microsoft, "link /dump /symbols <filename>" le dará los detalles morbosos. Probablemente hay otras maneras (u opciones) para dar una lista más fácil de leer.

En Linux / Unix puede utilizar objdump -T para enumerar los símbolos exportados contenidas en un objeto dado. En Windows hay dumpbin (dumpbin /exports IIRC). Tenga en cuenta que C ++ nombres de función se truncan con el fin de permitir que las sobrecargas.

EDIT: después de ver codelogic anwser recordé que objdump también entiende -C realizar de-mangling.

utilizar este comando:

objdump -t "tu-biblioteca"

Se imprimirá más de lo que quiere - no sólo funcionar nombres, sino a toda la tabla de símbolos. Compruebe los diversos atributos de los símbolos que obtenga, y usted será capaz de resolver las funciones de las variables y otras cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top