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を実行しているので、これでは何も起こりません。
Dirコマンドを使用してソースパスを設定する
dir /usr/src/debug
上記のパスで。コードが表示されます。
実行可能ファイルには、アセンブルされたコードの各ビットに対応するファイル(およびファイル内の特定の行)を示すデバッグシンボルが含まれています。これにより、デバッガーでCコードをステップ実行できます。デバッグシンボルは、コンパイラーによってそこに配置されます(例:-g
gccへの引数)。
実行可能ファイルのコンパイルに使用されたCファイルがない場合、デバッガーはCを表示できず、アセンブリの表示に制限されます。