GDB没有这样的文件或目录

Sti*_*eur 10 c linux debugging assembly gdb

我正在从OpenSecurityTraining学习这些课程.

我已到达实验室部分,我将在CMU炸弹上训练自己.他们提供了一个x86_64编译的CMU炸弹,你可以在这里找到训练:CMU Bomb x86-64最初来自CMU实验室计算机系统的32位炸弹:程序员视角(CS:APP)第1版.

我有一个虚拟化的64位Elementary OS发行版,在那里我使用GDB解压缩CMU Bomb没有问题.现在,我有一个64位Ubuntu 14.04 LTS(未虚拟化),当我尝试重现我在Elementary 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
Run Code Online (Sandbox Code Playgroud)

编辑:我可以在CMU炸弹的其他功能上创建断点,它可以按预期工作.
示例:

(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.
Run Code Online (Sandbox Code Playgroud)

我听说过ia32-libs,但是由于我在64位Ubuntu并且运行64位编译的CMU炸弹,所以没有做更多的事情,我错了吗?

小智 7

使用dir命令设置源路径

dir /usr/src/debug
Run Code Online (Sandbox Code Playgroud)

在上面的路径.你的代码应该出现.

  • 你应该详细说明. (6认同)

Ton*_*ony 6

可执行文件包含调试符号,这些符号指示与汇编代码的每一位对应的文件(以及文件中的特定行)。这使您可以在调试器中单步调试 C 代码。调试符号由编译器放在那里(例如,通过使用-ggcc的参数)。

如果您没有用于编译可执行文件的 C 文件,调试器将无法向您显示 C,您将只能查看程序集。