Zrzut podstawowy to tylko zrzut pamięci programów, jeśli wiesz, gdzie wszystko było, możesz po prostu tego użyć.
Używasz pliku wykonywalnego, ponieważ wyjaśnia on, gdzie (pod względem adresów logicznych) rzeczy znajdują się w pamięci, tj. Plik podstawowy.
Jeśli użyjesz polecenia objdump
, zrzuci on metadane dotyczące badanego obiektu wykonywalnego. Jako przykład można użyć obiektu wykonywalnego o nazwie a.out.
objdump -h a.out
zrzuca tylko informacje nagłówka, zobaczysz sekcje o nazwie np. .data lub .bss lub .text (jest ich znacznie więcej). Informują one moduł ładujący jądra, gdzie w obiekcie można znaleźć różne sekcje i gdzie w przestrzeni adresowej procesu sekcja powinna zostać załadowana, a dla niektórych sekcji (np. .Data .text), co należy załadować. (sekcja .bss nie zawiera żadnych danych w pliku, ale odnosi się do ilości pamięci do zarezerwowania w procesie na niezainicjowane dane, jest wypełniona zerami).
Układ pliku wykonywalnego obiektu jest zgodny ze standardem ELF.
objdump -x a.out
- zrzuca wszystko
Jeśli obiekt wykonywalny nadal zawiera tabele symboli (nie został usunięty - man strip
a użytkownik -g
generował debugowanie gcc
przy założeniu kompilacji źródła ac), to można sprawdzić zawartość rdzenia według nazw symboli, np. Jeśli miałeś zmienną / bufor o nazwie inputLine w kodzie źródłowym, możesz użyć tej nazwy w gdb
celu sprawdzenia jego zawartości. tzn. znałbygdb
przesunięcie od początku zainicjowanych przez program segmentów danych, w których rozpoczyna się inputLine, i długość tej zmiennej.
Dalsza lektura art. 1 ,
art. 2 oraz szczegółowej specyfikacji pliku wykonywalnego i formatu łączącego (ELF) .
Zaktualizuj po komentarzu @mirabilos poniżej.
Ale jeśli używasz tabeli symboli jak w
$ gdb --batch -s a.out -c core -q -ex "x buf1"
Produkuje
0x601060 <buf1>: 0x72617453
a następnie nie używając tablicy symboli i nie sprawdzając adresu bezpośrednio w
$ gdb --batch -c core -q -ex "x 0x601060"
Produkuje
0x601060: 0x72617453
Zbadałem pamięć bezpośrednio, bez użycia tablicy symboli w drugim poleceniu.
Widzę również, że odpowiedź @ user580082 stanowi dodatkowe wyjaśnienie i będzie głosować w górę.