2012-02-20 8 views
13

Tengo una carpeta en Linux, que contiene varios archivos de objetos compartidos (* .so). ¿Cómo puedo encontrar la función en archivos de objetos compartidos usando las funciones objdump y bash en Linux?¿Cómo puedo encontrar la función en archivos de objetos compartidos utilizando las funciones objdump y bash en Linux?

Por ejemplo, el siguiente ejemplo se encuentra mi función func1 en mylib.so:

objdump -d mylib.so | grep func1 

pero quiero encontrar func1 en la carpeta que se contiene archivos de objetos compartidos. No sé el lenguaje bash y cómo combinar los comandos del terminal de linux.

Respuesta

23

nm es más simple que objdump, para esta tarea.
nm -A *.so | grep func debería funcionar. La bandera -A indica nm para imprimir el nombre del archivo.

+0

Usted necesita la opción '-D', así que realmente se ven en la lista de símbolos exportados. –

+0

@ jørgensen, no está claro a partir de la pregunta si él quiere una función exportada. Quizás él quiera saber qué biblioteca necesita reconstruir después de cambiar una función. – ugoren

2

Se puede utilizar también el uso,

find <path> -name "*.so" -exec nm {} \; | grep func1 
+1

'grep func1 nm {}' ?? ¿Quieres decir 'nm {} | grep func1'? – ugoren

+1

Correría nm | grep func1, la ejecución es de izquierda a derecha si lo está usando sin exec. Pero con exec la ejecución es de derecha a izquierda y {} especifica la entrada del comando find, por lo que el comando anterior significa 'ejecutar grep en el resultado de nm para todos los archivos de find'. – Deepak

+1

Probé tu línea, simplemente no funciona. Simplemente ejecuta 'grep func1 nm xxx.so' por archivo, que busca' func1' en un archivo llamado "nm" y en el binario (sin ejecutar nm). – ugoren

Cuestiones relacionadas