3

レジスタが保持している値を確認するにはどうすればよいですか? 次のアセンブリラインがあります。

 mov 0x8(%rax), %rax
 cpm %ebx, (%rax)

次のコマンドを使用します。

 (gdb) p/x $ebx
 (gdb) p/x $rbx
 $3 = 0xb

このレジスタに格納されている値を取得します。ただし、メモリの場所 (%rax) に格納されているものを確認しようとすると、次の問題が発生します。

(gdb) display *(int *)$rax
Disabling display 10 to avoid infinite recursion.
10: *(int *)$rax = Cannot access memory at address 0x17

なぜこれが起こるのか、さらに (%rax) が何を持っているのかを調べる方法がわかりません。

4

2 に答える 2

6

レジスタの値を確認するには、次を使用します

print $rax
info register $rax
info register

あなたの場合rax、番号が含まれているよう0x17で、デバッガーはこの場所にアクセスできません。rax整数を指す有効なアドレスが含まれていることを確認してください。

ざっと見たい場合は、printの代わりに使用してください。コマンドをdisplay乱用しないでください。display式に一種のウォッチドッグが必要な場合に使用できます。

クイックリファレンスはこちら

http://www.yolinux.com/TUTORIALS/GDB-Commands.html

それが役に立てば幸い。

于 2012-11-08T07:11:09.847 に答える
1

使用している CPU の種類 (x86?) がわからないのですが、メモリ アクセスを調整する必要がありますか? これは、0x08、0x10、0x18、0x20 などにアクセスできることを意味します (または、0x00、0x20、0x40 などの 32 ビット ワードである可能性があります)。アーキテクチャによっては、これは間違った答えになる可能性があります。また、レジストリタグは何のためのものですか? Windows レジストリは関連していないようです。

于 2012-11-08T04:52:18.067 に答える