前: Source Path, 上: Source
info lineコマンドを使用してソース行をプログラム・アドレスに
(あるいは、
プログラム・アドレスをソース行に)
対応付けすることができます。
また、
disassembleコマンドを使用して、
あるアドレス範囲をマシン命令として表示することもできます。
gnu Emacsモードで実行されている場合、
現在のinfo lineコマンドは、
指定された行を示す矢印を表示します。
また、
info lineコマンドは、
アドレスを16進形式だけではなくシンボリック形式でも表示します。
info line linespeclistコマンド
(see Printing source lines)
が理解できる任意の形式によってソース行を指定することができます。
例えば、
info lineコマンドによって、
関数m4_changequoteの最初の行に対応するオブジェクト・コードの位置を知ることができます。
(gdb) info line m4_changecom
Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.
また、
(linespecの形式として*addrを使用することで)
ある特定のアドレスがどのソース行に含まれているのかを問い合わせることができます。
(gdb) info line *0x63ff
Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.
info lineの実行後、
xコマンドのデフォルト・アドレスは、
その行の先頭アドレスに変更されます。
これにより、
マシン・コードの調査を開始するには`x/i'を実行するだけで十分となります
(see Examining memory)。
また、
このアドレスはコンビニエンス変数$_の値として保存されます
(see Convenience variables)。
disassemble以下の例は、 あるアドレス範囲のHP PA-RISC 2.0コードを逆アセンブルした結果を示しています。
(gdb) disas 0x32c4 0x32e4
Dump of assembler code from 0x32c4 to 0x32e4:
0x32c4 <main+204>: addil 0,dp
0x32c8 <main+208>: ldw 0x22c(sr0,r1),r26
0x32cc <main+212>: ldil 0x3000,r31
0x32d0 <main+216>: ble 0x3f8(sr4,r31)
0x32d4 <main+220>: ldo 0(r31),rp
0x32d8 <main+224>: addil -0x800,dp
0x32dc <main+228>: ldo 0x588(r1),r26
0x32e0 <main+232>: ldil 0x3000,r31
End of assembler dump.
アーキテクチャによっては、 一般に使用される命令ニーモニックを複数持つものや、 異なる構文を持つものがあります。
set assembly-language instruction-setdisassembleコマンドまたはx/iコマンドによってプログラムの逆アセンブルを行う際に使用する
命令セットを選択します。
現在のところ、
このコマンドは、
Intel x86ファミリに対してのみ定義されています。
instruction-setは、
i386とi8086のいずれかにセットすることができます。
デフォルトはi386です。