2011-10-18 71 views
9

我正在查看一些反彙編代碼,看到類似0x01c8f09b <+0015> mov 0x8(%edx),%edi,我想知道%edx%edi的值是多少。如何在Xcode控制檯中打印反彙編寄存器

有沒有辦法打印%edx或其他裝配變量的值?有沒有辦法在%edx指向的內存地址處打印值(我假設edx是包含指向...的某個指針的寄存器)。

例如,您可以通過在控制檯中鍵入po來打印對象,因此在程序集中是否有用於打印寄存器/變量的命令或語法?

背景:

我得到這條線上EXC_BAD_ACCESS,我想調試是怎麼回事。我知道這個錯誤與內存管理有關,我正在考慮找出我可能丟失的位置/太多保留/釋放/自動釋放調用。

附加信息:

這是IOS,和我的應用程序在iPhone模擬器中運行。

回答

14

可以打印一個寄存器(例如,eax)使用:

print $eax 

或簡稱:

p $eax 

要打印爲十六進制:

p/x $eax 

要顯示寄存器指向的值:

x $eax 

詳細信息請參考gdb的幫助:

help print 
help x 
2

那些不是變量,而是寄存器。

在GDB,您可以使用下面的命令看到的標準寄存器的值:

info registers 

注意寄存器包含整數值(在你的情況下32位,作爲寄存器名稱由e前綴) 。它代表的是不知道的。它可以是一個指針,一個整數,主要是任何東西。

如果po當你嘗試打印一個寄存器的值作爲一個指針時崩潰,它可能是該值不是一個指針(或一個無效的)。

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 

Debugging with gdb

你可以參考機器寄存器的內容,在表達式中,與名 以`$」變量。每臺機器的寄存器名稱不同;請使用info 寄存器來查看您的機器上使用的名稱。

info registers 

打印除了浮點 寄存器(在所選擇的堆棧幀)的名稱和所有寄存器的值。

info all-registers 

打印所有寄存器的名稱和值,包括浮點寄存器 。

info registers regname ... 

打印每個指定寄存器名稱的相對化值。 註冊名稱可以是您正在使用的機器上有效的任何註冊名稱, 有或沒​​有初始`$'。

8

要看了您正在使用的Xcode的編譯器/調試器。對於GCC/GDB每次的

info registers 

但鐺/ LLDB它

register read 
4

如果您正在使用LLDB代替GDB可以使用register read

相關問題