it-swarm.com.de

Wie erhalte ich den Symbolnamen für eine Speicheradresse in GDB?

Ich weiß zum Beispiel, dass 0x46767f0 zu einem NSString * gehört. Gibt es eine Möglichkeit, herauszufinden, was NSString ist, um mir zu helfen, einige Fehler zu finden, nach denen ich suche?

34
Coocoo4Cocoa

Ich glaube, Sie suchen:

info symbol <addresss>

Den Namen eines Symbols ausgeben, das an der Adresse addr gespeichert ist. Wenn kein genaues Symbol bei addr gespeichert ist, druckt GDB das nächstgelegene Symbol und einen Versatz davon.

Beispiel:

(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

Sie können mehr darüber lesen hier .

49

gdb> liste * 0xAABBCCDD

Das sagt Ihnen den Dateinamen und die Zeilennummer.

12
Jay Ram

Wenn es sich um eine Stack-Variable handelt, gibt es keine Möglichkeit, dies zu tun. Andernfalls versuchen Sie p/a <pointer symbol or address>, und der Symbolname wird gedruckt (oder um den nächsten Symbolnamen versetzt).

3
Simon Broadhead

po 0x46767f0 

sendet eine -description-Nachricht an das Objekt. Dadurch wird der Inhalt Ihres NSStrings ausgedruckt. Ich schlage jedoch vor, Brian 'Antwort zu verwenden, um den Inhalt Ihrer Adresse zu prüfen, bevor Sie zufällige Nachrichten an zufällige Adressen senden.

3
Rog

addr2line

Dieses Binutils-Dienstprogramm kann mit jeder Symboladresse umgehen, einschließlich Variablen und Funktionsnamen.

Es ist standardmäßig nicht interaktiv, was in einigen Fällen nützlich ist, wenn Post-Mortems durchgeführt werden.

haupt c:

#include <stdio.h>

int myvar;

int main(void) {
    printf("myvar = %d\n", myvar);
}

Kompilieren und zerlegen:

gcc -O 0 -g gdb3 -o main -pedantic-errors -std=c89 -Wextra main.c
readelf -s tmp.out  | grep -E ' (main|myvar)'

Gibt:

55: 0000000000201014     4 OBJECT  GLOBAL DEFAULT   24 myvar
65: 000000000000064a    32 FUNC    GLOBAL DEFAULT   14 main

Und jetzt können wir versuchen:

addr2line -e main 201014 64a

was gibt:

/full/path/to/main.c:3
/full/path/to/main.c:5