web-dev-qa-db-ja.com

GDBにはそのようなファイルやディレクトリはありません

OpenSecurityTraining からのこれらのレッスンをフォローしています。

私はCMU爆弾について自分自身を訓練する必要があるラボの部分に到達しました。 CMU Bomb x86-64CMU Labsの32ビット爆弾からのトレーニングです。コンピュータシステム:プログラマの視点(CS:APP)第1版

私は仮想化された64ビットElementary OSディストリビューションを持っていて、GDBを使用して問題なくCMU Bombを分解しました。現在、私は64ビットのUbuntu 14.04 LTS(仮想化されていません)を使用しています。エレメンタリーOSで行った理由を再現しようとすると、有名なエラーが発生します。

私はこれらのコマンドを実行します:

gdb ./bomb-x64
(gdb) b main
Breakpoint 1 at 0x400dbd: file bomb.c, line 37. -- why bomb.c ?
(gdb) r
...
bomb.c: no such file or directory

Edit:CMU Bombの他の関数にブレークポイントを作成でき、期待どおりに動作します。
例:

(gdb) b phase_1
Breakpoint 3 at 0x400f00
(gdb) r

Breakpoint 1, 0x0000000000400f00 in phase_1 ()
(gdb) disas
Dump of assembler code for function phase_1:
=> 0x0000000000400f00 <+0>: sub    $0x8,%rsp
   0x0000000000400f04 <+4>: mov    $0x4023b0,%esi
   0x0000000000400f09 <+9>: callq  0x401308 <strings_not_equal>
   0x0000000000400f0e <+14>:    test   %eax,%eax
   0x0000000000400f10 <+16>:    je     0x400f17 <phase_1+23>
   0x0000000000400f12 <+18>:    callq  0x40140a <explode_bomb>
   0x0000000000400f17 <+23>:    add    $0x8,%rsp
   0x0000000000400f1b <+27>:    retq   
End of assembler dump.

Ia32-libsについて聞いたことがありますが、64ビットのUbuntuを使用していて、64ビットのコンパイル済みCMU Bombを実行しているので、これでは何も起こりません。

11
Stilleur

Dirコマンドを使用してソースパスを設定する

dir /usr/src/debug

上記のパスで。コードが表示されます。

7
Dinesh Chowdary

実行可能ファイルには、アセンブルされたコードの各ビットに対応するファイル(およびファイル内の特定の行)を示すデバッグシンボルが含まれています。これにより、デバッガーでCコードをステップ実行できます。デバッグシンボルは、コンパイラーによってそこに配置されます(例:-g gccへの引数)。

実行可能ファイルのコンパイルに使用されたCファイルがない場合、デバッガーはCを表示できず、アセンブリの表示に制限されます。

4
Tony