我从OpenSecurityTraining学习了这些课程。
我已到达实验室部分,我将在CMU炸弹上训练自己。它们提供了一个x86_64编译的CMU炸弹,你可以在这里查看:CMU Bomb x86-64来自CMU Labs for Computer Systems: A Programmer's Perspective (CS:APP) 1st edition的32位炸弹。
我有一个虚拟化的64位小学操作系统发行版,我在没有使用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
编辑:我可以在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.
我已经听说过ia32-libs,但是由于我在64位Ubuntu上并且运行64位编译的CMU炸弹,我没有做更多的事情,我错了吗?
答案 0 :(得分:6)
使用dir命令设置源路径
dir /usr/src/debug
在上面的路径。你的代码应该出现。
答案 1 :(得分:4)
可执行文件包含调试符号,用于指示与汇编代码的每个位对应的文件(以及文件中的特定行)。这使您可以在调试器中单步执行C代码。调试符号由编译器放在那里(例如,通过使用gcc的-g
参数)。
如果您没有用于编译可执行文件的C文件,调试器将无法向您显示C,并且您将仅限于查看程序集。