Chciałbym uzyskać dostęp do ramek przechowywanych w głównym zrzucie programu, który nie ma symboli debugowania (chcę to zrobić w C). Kiedy otwieram program i zrzut rdzenia wewnątrz GDB, otrzymuję ślad stosu zawierający nazwy funkcji. Na przykład:Jak odczytywać klatki ze zrzutu pamięci (bez GDB)?
(gdb) bt
#0 0x08048443 in layer3()
#1 0x08048489 in layer2()
#2 0x080484c9 in layer1()
#3 0x0804854e in main()
Nazwy wszystkich funkcji są przechowywane w pliku wykonywalnym w sekcji .strtab. Jak mogę utworzyć ślad stosu z różnymi ramkami? Uruchamianie GDB w trybie wsadowym to , a nie opcja. A także "kopiowanie części z gdb są potrzebne" jest również złym pomysłem, ponieważ kod nie jest napisany niezależnie.
Tak, aby moje pytanie było bardziej precyzyjne: Gdzie znajdę punkt wewnątrz zrzutu pamięci, w którym mogę zacząć czytać informacje o stosie? Czy istnieje jakaś biblioteka do uzyskiwania dostępu do tych informacji? Strukturę, której mogę użyć? A może jeszcze lepiej, dokumentacja w jaki sposób informacje te są uporządkowane wewnątrz zrzutu pamięci?
(ja już widziałem na pytanie „how to generate a stack trace from a core dump file in C, without invoking an external tool such as gdb”, ale ponieważ nie jest ważna odpowiedź, myślałem, że chciałbym go zapytać ponownie)
[Edytuj] Robię to pod Linux x86
Windows, Linux lub MacOS? x86, x86_64, PPC, Arm ....? – Flexo
O kurwa, przepraszam, zapomniałem! Linux, x86 – Uhlo
http://www.kernel.org/doc/man-pages/online/pages/man5/core.5.html – Flexo