0

これをGDBで理解しようとしていますが、次のように表示されます。

(gdb) print/t $eax
$2 = 1000000001001010000000011010
(gdb) x/4xb $eax
0x804a01a <testinput>:  0x41    0x42    0x43    0x44

これは本質的にASCII値「ABCD」です。これらの値を一度に1バイト取得したいので、$alの最初のバイトを取得することから始めようとしました。ただし、$alには0x1aが含まれています。

まず、バイナリ1000000001001010000000011010は0x41 0x42 0x43 0x44とどのように等しくなりますか?(0x41は0100 0001に等しいと思いますが、上記のパターンは表示されません)次に、$ alに0x1aが含まれているのはなぜですか?

4

1 に答える 1

0

あなたは2つの完全に異なるものを見ています。最初のコマンドは、eaxレジスタの値を出力します。2番目のコマンドは、メモリ内の特定の場所の値を出力します。いずれかの方法で一方を他方と同一視する必要がある理由はありません。

gdbヘルプが言うように:

メモリを調べます:x / FMTADDRESS
ADDRESSは、調べるメモリアドレスの式です。

最後の質問ですが、の下位バイトはeaxです00011010。16進数です0001。16進数です。だから。11010a0x1a

于 2012-10-13T21:57:45.313 に答える