2011-10-18 23 views
9

Sto guardando un codice di disassemblaggio e vedo qualcosa come 0x01c8f09b <+0015> mov 0x8(%edx),%edi e mi chiedo quale sia il valore di %edx o %edi.Come stampare i registri di disassemblaggio nella console Xcode

C'è un modo per stampare il valore di %edx o altre variabili di assieme? C'è un modo per stampare il valore all'indirizzo di memoria che %edx punti a (sto assumendo edx è un registro contenente un puntatore a ... qualcosa qui).

Ad esempio, è possibile stampare un oggetto digitando po nella console, quindi esiste un comando o una sintassi per la stampa di registri/variabili nell'assieme?

Background:

sto ottenendo EXC_BAD_ACCESS su questa linea e vorrei eseguire il debug di cosa sta succedendo. Sono consapevole che questo errore è legato alla gestione della memoria e sto cercando di capire dove potrei mancare/anche - molte chiamate di mantenimento/rilascio/autoricolazione.

Informazione supplementare:

Questo è su IOS, e la mia applicazione è in esecuzione nel simulatore iPhone.

risposta

14

È possibile stampare un registro (ad esempio, eax) utilizzando:

print $eax 

o per brevi:

p $eax 

stamparlo come esadecimale:

p/x $eax 

Per mostra il valore indicato da un registro:

x $eax 

Controllare l'aiuto gdb per maggiori dettagli:

help print 
help x 
2

Quelle non sono variabili, ma registri.

In GDB, è possibile vedere i valori dei registri standard utilizzando il seguente comando:

info registers 

Si noti che un registro contenente valori interi (32bit nel tuo caso, come il nome del registro è preceduto da e) . Ciò che rappresenta non è noto. Può essere un puntatore, un intero, per lo più qualsiasi cosa.

Se po si arresta in modo anomalo quando si tenta di stampare un valore di registro come puntatore, è probabile che il valore non sia un puntatore (o uno non valido).

9
(gdb) info reg 
eax   0xe 14 
ecx   0x2844e0 2639072 
edx   0x285360 2642784 
ebx   0x283ff4 2637812 
esp   0xbffff350 0xbffff350 
ebp   0xbffff368 0xbffff368 
esi   0x0 0 
edi   0x0 0 
eip   0x80483f9 0x80483f9 <main+21> 
eflags   0x246 [ PF ZF IF ] 
cs    0x73 115 
ss    0x7b 123 
ds    0x7b 123 
es    0x7b 123 
fs    0x0 0 
gs    0x33 51 

Da Debugging with gdb:

È possibile fare riferimento al contenuto del registro della macchina, nelle espressioni, come variabili con nomi che iniziano con `$'. I nomi dei registri sono diversi per ogni macchina; usa i registri per vedere i nomi usati sulla tua macchina.

info registers 

Stampa i nomi ei valori di tutti i registri eccetto virgola mobile registri (in stack frame selezionato).

info all-registers 

Stampa i nomi ei valori di tutti i registri, tra cui floating-point registri.

info registers regname ... 

Stampa il valore relativizzato di ciascun reg registro specificato. regname può essere qualsiasi nome di registro valido sulla macchina che si sta utilizzando, con o senza l'iniziale `$ '.

8

Dipende up che Xcode compilatore/debugger che si sta utilizzando. Per gcc/gdb è

info registers 

ma per clang/lldb è

register read 
4

Se si utilizza LLDB invece di GDB è possibile utilizzare register read

Problemi correlati