繁体   English   中英

GDB 没有那个文件或目录

[英]GDB no such file or directory

我正在学习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

编辑:我可以在 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 炸弹,我错了吗?

使用dir命令设置源路径

dir /usr/src/debug

在上述路径中。 您的代码应显示。

该可执行文件包含调试符号,这些调试符号指示与汇编代码的每一位相对应的文件(文件中的特定行)。 这就是使您能够在调试器中逐步执行C代码的原因。 调试符号由编译器放置在此处(例如,通过使用gcc的-g参数)。

如果您没有用于编译可执行文件的C文件,则调试器将无法向您显示C,并且您将只能查看汇编语言。

(gdb) list 
/home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/tasks.c: No such file or directory.
(gdb) set substitute-path /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/ C:/Espressif/frameworks/esp-idf-v4.4/  
    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM