基本的に、GDBのレジスタに格納されているアドレスからオフセットされたメモリアドレスの値を出力する方法を考えています。たとえば、次のアセンブリ ラインを考えてみましょう。
mov 0x34(%esp),%edx
私の理解では、これはスタック ポインターが指すアドレスの 52 バイト後の値を取得し、その値を edx レジスター内に格納します。この場合、値は文字列なので、char * が格納されます。edx レジスターで GDB 内の inspect コマンドを使用する場合:
x/s $edx
想定どおりに文字列を出力します。ただし、このコマンドを使用してコピー元の場所を直接調べて文字列を出力しようとすると、次のようになります。
x/s $esp + 0x34
ガベージを出力します。どうしてこれなの?GDB コマンドの構文を誤解していますか、それとも別の何かですか?