0

私はGDBを学んでいます。x /3b コマンドを実行して 3 バイトの char 配列を表示すると、配列名の前に * を付けるかどうかによって、2 つの異なる出力が得られます。

(gdb) x /3b myThreeCharArray
0x7fffffffe3c0: 4   11  64
(gdb) x /3b *myThreeCharArray
0x400b04 <debug>:   85  72  -119

これら 2 つの出力の違いは何ですか? 私の理解では、 x コマンドは、特定の変数によって表されるメモリ内のバイトを表示します。したがって、 x コマンドは本質的に変数名を「逆参照」すると思っていたと思いますが、明らかにそうではありません。どうしたの?

4

1 に答える 1

3

gdbx コマンドでは、アドレスを取得し、そのメモリ位置から値を出力しようとします。したがって、2 番目のケースでは、逆参照してアドレスとして解釈myThreeCharArrayする値を生成し、gdbその「場所」でメモリを出力しようとします。最初の 3 つの数字を 16 進数に変換すると、これが当てはまることがわかります。

64 is 0x40
11 is 0x0B
04 is 0x04

エンディアンのため順番が入れ替わっています。

于 2013-03-03T19:28:11.637 に答える