2011-10-18 17 views
9

Estoy buscando un código de desensamblaje y veo algo así como 0x01c8f09b <+0015> mov 0x8(%edx),%edi y me pregunto cuál es el valor de %edx o .Cómo imprimir registros de desensamblaje en la consola de Xcode

¿Hay alguna forma de imprimir el valor de %edx u otras variables de ensamblaje? ¿Hay alguna manera de imprimir el valor en la dirección de memoria que %edx apunta a (supongo que edx es un registro que contiene un puntero a ... algo aquí).

Por ejemplo, puede imprimir un objeto escribiendo po en la consola, entonces ¿hay un comando o sintaxis para imprimir registros/variables en el conjunto?

Antecedentes:

Me estoy EXC_BAD_ACCESS en esta línea y me gustaría depurar lo que está pasando. Soy consciente de que este error está relacionado con la administración de la memoria y estoy tratando de averiguar dónde me puedo perder/demasiadas llamadas retención/liberación/liberación automática.

Información adicional:

Este es el IOS, y mi aplicación se está ejecutando en el simulador de iPhone.

Respuesta

14

Puede imprimir un registro (por ejemplo, eax) usando:

print $eax 

O, para abreviar:

p $eax 

imprimirlo como hexadecimal:

p/x $eax 

Para mostrar el valor apuntado por un registro:

x $eax 

Comprobar la ayuda GDB para más detalles:

help print 
help x 
2

No son variables, sino registros.

En el BGF, se puede ver los valores de los registros estándar utilizando el siguiente comando:

info registers 

Tenga en cuenta que un registro contiene valores enteros (de 32 bits en su caso, como el nombre del registro es prefijado por e) . Lo que representa no se conoce. Puede ser un puntero, un entero, principalmente cualquier cosa.

Si po se bloquea al intentar imprimir el valor de un registro como un puntero, es probable que el valor no sea un puntero (o uno no válido).

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 

De Debugging with gdb:

Se puede hacer referencia a contenido de los registros de la máquina, en las expresiones, como variables con nombres que comienzan con '$'. Los nombres de los registros son diferentes para cada máquina; utilice los registros para ver los nombres utilizados en su máquina.

info registers 

Imprimir los nombres y los valores de todos los registros, excepto de punto flotante registros (en el marco de la pila seleccionada).

info all-registers 

Imprimir los nombres y los valores de todos los registros, incluyendo coma flotante registros.

info registers regname ... 

Imprime el valor relativizado de cada registro especificado regname. regname puede ser cualquier nombre de registro válido en la máquina que está usando, con o sin el `$ 'inicial.

8

Depende de hasta el que Xcode compilador/depurador que está utilizando. Para gcc/GDB es

info registers 

pero para sonido metálico/LLDB es

register read 
4

Si está utilizando LLDB en lugar de GDB puede utilizar register read

Cuestiones relacionadas