2010-11-23 8 views

risposta

4

A 'simbolo' è un identificatore simbolica tra cui la funzione e nomi delle variabili.

Il compilatore/linker crea una tabella dei simboli durante la compilazione e viene utilizzato dal debugger per fornire nomi simbolici a livello di origine a queste entità, al contrario degli indirizzi semplici (da cui il nome "debugger simbolico" che potresti venire attraverso).

+0

Grazie Clifford - che chiarisce le cose! –

3

Sono voci nel codice del symbol table, generati durante la compilazione di esso. Variabili, funzioni, ecc.

+0

Ah, ho dimenticato di Wikipedia - grazie per la tua risposta! –

3

I simboli sono nomi umani di variabile, funzione, classe ... senza simboli, vedrai che tutto è solo dati all'indirizzo.
esempio:
con i simboli:

call printf 

senza simbolo

call dword ptr 0x804480 
+0

Grazie per l'uscita del campione dell'assemblatore. –

0

E i simboli di debug (probabilmente denominati a causa del modo in cui "STABS", ad esempio, li memorizza nella tabella dei simboli) si riferiscono anche ai dati superiori a & oltre a quelli richiesti dal linker, come il numero di linea/mapping degli indirizzi, tipo informazioni, variabili locali e non dimentica i simboli "statici" (di cui chiaramente non è necessario il linker, ma che sono ovviamente di grande importanza per il debug).

Ovviamente, le immagini PE non hanno bisogno (o sono tipicamente) "tabelle dei simboli" come tali, ma solo tabelle di importazione/esportazione. Pertanto, nel contesto di Windows, "simboli" e "simboli di debugging" tendono ad essere usati in modo intercambiabile per fare riferimento a qualsiasi simbolo rimasto dopo il collegamento; con la toolchain di MS questi (quasi?) vanno sempre nei file "pdb". (Vedi .)

Problemi correlati