2010-11-23 20 views

Antwort

4

A 'Symbol' ist eine symbolische Kennung einschließlich Funktion und Variablennamen. Der Compiler/Linker erstellt während des Builds eine Symboltabelle, die vom Debugger verwendet wird, um diesen Entitäten symbolische Namen auf Source-Ebene zu geben, im Gegensatz zu einfachen Adressen (daher der Name "symbolic debugger", den Sie möglicherweise erhalten) über).

+0

Danke Clifford - das macht alles klar! –

3

Sie sind Einträge in den Code des symbol table, erzeugt wird, wenn es zu kompilieren. Variablen, Funktionen, etc.

+0

Ah, ich habe es auf Wikipedia vergessen - danke für deine Antwort! –

3

Symbole sind menschliche Namen von Variable, Funktion, Klasse ... ohne Symbole, Sie sehen alles nur Daten an Adresse.
Beispiel:
mit Symbolen:

call printf 

ohne Symbol

call dword ptr 0x804480 
+0

Danke für die Assembler-Beispielausgabe. –

0

Und Debugging-Symbole (wahrscheinlich so genannt wegen der Art und Weise "STABS" zum Beispiel in der Symboltabelle gespeichert) bezieht sich auch auf Daten über & hinaus, was der Linker benötigt, wie Zeilennummer/Adresszuordnungen, Typ Informationen, lokale Variablen und nicht zu vergessen "statische" Symbole (die der Linker offensichtlich nicht benötigt, die aber offensichtlich für das Debugging von großer Bedeutung sind).

Natürlich brauchen PE-Bilder keine "Symboltabellen" als solche (oder besitzen sie in der Regel) - einfach Tabellen importieren/exportieren. Im Zusammenhang mit Windows werden daher "Symbole" und "Debugging-Symbole" austauschbar verwendet, um sich auf beliebige Symbole zu beziehen, die nach der Verknüpfung übrig bleiben; Mit MSs Toolchain gehen diese (fast?) immer in "pdb" -Dateien. (Siehe .)

Verwandte Themen