Jak uzyskać nazwę symbolu dla adresu pamięci w GDB?
Na przykład, Wiem, że 0x46767f0 należy do NSString*, czy jest jakiś sposób, aby dowiedzieć się, co to jest NSString, aby pomóc mi znaleźć jakieś błędy jestem po?
5 answers
Chyba szukasz:
info symbol <addresss>
Wypisuje nazwę symbolu, który jest przechowywany pod adresem addr. Jeśli żaden symbol nie jest przechowywany dokładnie w addr, GDB wyświetla najbliższy symbol i przesunięcie od niego.
Przykład:
(gdb) info symbol 0x400225
_start + 5 in section .text of /tmp/a.out
(gdb) info symbol 0x2aaaac2811cf
__read_nocancel + 6 in section .text of /usr/lib64/libc.so.6
Możesz przeczytać więcej na ten temat tutaj .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-09 08:15:55
Gdb> list *0xAABBCCDD
To określa nazwę pliku i numer linii.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-29 17:01:20
Jeśli jest to zmienna stosu, nie ma możliwości, abym był tego świadomy. W przeciwnym razie spróbuj p/a <pointer symbol or address>
i wyświetli nazwę symbolu (lub przesunie się do najbliższej nazwy symbolu).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-18 00:34:11
Po 0x46767f0
Wyśle -description
wiadomość do obiektu. To wydrukuje zawartość Twojego Nsstringu, ale sugeruję użycie odpowiedzi Briana, aby sprawdzić zawartość Twojego adresu, zanim wyślesz losowe wiadomości na losowe adresy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-25 14:01:58
addr2line
To narzędzie Binutils może obsługiwać dowolny adres symbolu, w tym zmienne i nazwy funkcji.
Domyślnie nie jest interaktywny, co jest przydatne w niektórych przypadkach, podczas wykonywania Post-mortemów.
Main.c:
#include <stdio.h>
int myvar;
int main(void) {
printf("myvar = %d\n", myvar);
}
Kompilować i demontować:
gcc -O 0 -g gdb3 -o main -pedantic-errors -std=c89 -Wextra main.c
readelf -s tmp.out | grep -E ' (main|myvar)'
Daje:
55: 0000000000201014 4 OBJECT GLOBAL DEFAULT 24 myvar
65: 000000000000064a 32 FUNC GLOBAL DEFAULT 14 main
A teraz możemy spróbować:
addr2line -e main 201014 64a
Co daje:
/full/path/to/main.c:3
/full/path/to/main.c:5
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 16:14:17