2012-02-20 6 views
13

Mam folder w Linuksie, który zawiera kilka plików obiektów współdzielonych (* .so). Jak mogę znaleźć funkcje w plikach obiektów współdzielonych za pomocą funkcji objdump i bash w systemie Linux?Jak mogę znaleźć funkcje w plikach obiektów udostępnionych za pomocą funkcji objdump i bash w systemie Linux?

Na przykład, następujący przykład znajdujemy mi funkcję func1 w mylib.so:

objdump -d mylib.so | grep func1 

ale chcę znaleźć func1 w folderze, który jest zawarty współdzielonych plików obiektowych. Nie znam języka bash i jak kombinować polecenia terminalu linuxowego.

Odpowiedz

23

nm jest prostszy niż objdump, do tego zadania.
nm -A *.so | grep func powinien działać. Flaga -A mówi nm, aby wydrukować nazwę pliku.

+0

Trzeba Opcja '-D' jak faktycznie wyglądają na liście eksportowanych symboli. –

+0

@ jørgensen, nie wynika jednoznacznie, czy chce wywożonej funkcji. Może on chce wiedzieć, jakiej biblioteki potrzebuje do odbudowy po zmianie funkcji. – ugoren

2

Można użyć również użyć,

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

'grep func1 nm {}' ?? Masz na myśli 'nm {} | grep func1'? – ugoren

+1

Można uruchomić nm | grep func1, wykonanie jest od lewej do prawej, jeśli używasz go bez exec. Ale przy exec wykonanie jest od prawej do lewej, a {} określa dane wejściowe z polecenia find, więc powyższe polecenie oznacza "uruchom grep na wyniku nm dla wszystkich plików z find". – Deepak

+1

Próbowałem twojej linii - to po prostu nie działa. Po prostu uruchamia 'grep func1 nm xxx.so' na plik, który wyszukuje' func1' w pliku o nazwie "nm" oraz w pliku binarnym (bez uruchamiania nm). – ugoren

Powiązane problemy