2011-10-18 11 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で

、次のコマンドを使用して、標準的なレジスタの値を見ることができます(登録名はeが付けられて、あなたのケースでは32ビット)レジスタは、整数値が含まれていることを

info registers 

注意。それが表すものは分かっていません。ポインタ、整数、ほとんど何でもかまいません。

レジスタの値をポインタとして出力しようとすると、poがクラッシュすると、値がポインタ(または無効な値)ではない可能性があります。 Debugging with gdbから

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 

:あなたは `$」で始まる名前 を持つ変数として、式の中で、マシン・レジスタの内容を参照することができ

。レジスタの名前はマシンごとに異なります。 info レジスタを使用して、お使いのマシンで使用されている名前を確認してください。

info registers 

プリントレジスタ(選択されたスタック・フレームにおける)浮動小数点以外の名前とすべてのレジスタの値。

info all-registers 

浮動小数点 レジスタを含むすべてのレジスタの名前と値を表示します。

info registers regname ... 

指定された各レジスタ名の相対値を出力します。 regnameは、使用しているマシン上で有効な任意のレジスタ名で、 の最初の `$ 'の有無にかかわらず可能です。

8

を、使用しているXcodeのコンパイラ/デバッガアップ異なります。 gccのために/それは

info registers 

だgdbをしかし打ち鳴らすために/それは

register read 
4

あなたがLLDB代わりにGDBを使用している場合は、register read

を使用することができますlldb
関連する問題