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 .

 45
Author: Brian Gianforcaro,
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.

 12
Author: Jay Ram,
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).

 3
Author: Simon Broadhead,
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.

 3
Author: Rog,
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
 0
Author: Ciro Santilli 新疆改造中心 六四事件 法轮功,
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