当我尝试运行和调试二进制文件时 GDB 挂起

逆向工程 部件 调试 数据库 苹果系统
2021-06-15 07:15:59

当我输入gdb a.out然后run在 gdb 本身内部时,我卡在空行上

jericho-laptop:exploit.education jericho$ gdb a.out 
GNU gdb (GDB) 9.1
...
Reading symbols from a.out...
(No debugging symbols found in a.out)
(gdb) run
Starting program: /Users/jericho/Desktop/exploit.education/a.out 
[New Thread 0x2703 of process 53514]
[New Thread 0x2603 of process 53514]

  <<< STUCK IN HERE >>>

它显然说创建了进程 53514 的 2 个线程。虽然该程序不是多线程的,但它是一个简单的微型 C 语言,只有一个主要功能。

控制台卡住了,我可以输入我想要的任何内容,但我无法让它继续,也无法让它退出。我必须强行关闭终端窗口。

我究竟做错了什么?

我不知道该怎么办。GDB 对我尝试运行的任何其他二进制文件执行相同的操作。我将 MacOS 与我共同设计的 gdb 9.1 一起使用。

3个回答

通过set startup-with-shell offgdb. 为什么?我不知道,不知道,我只是在某处读到它。

如果有人有不同的解决方案或知道为什么会这样,请在此处告诉我们。

如果您只在 GDB 中打开了程序并使用了run,那么您的程序将启动而不会停止让您调试它。GDB 通常只会开始提示您输入异常、信号或断点。

您最有可能需要做的是在 main 或其他感兴趣的函数上设置断点,然后使用 run。这将使 gdb 在断点处停止并提示您下一步要做什么。

一个方便的替代方法b main; runstart命令。start将在 main 或二进制文件中的任何其他适当的入口点放置一个断点,并立即开始运行程序。

总之,以下应该有效:

$ gdb a.out
...

(gdb) b main
...

(gdb) run <args>

或者开始:

$ gdb a.out
...

(gdb) start <args>
...

更多信息和详细信息可在此处获得:

我认为你没有做错任何事,你遇到了这个错误:https : //sourceware.org/bugzilla/show_bug.cgi?id=24069

通常,如果您重试几次,最终可能会使其工作;它看起来像一个竞争条件。

错误报告中提出的补丁在 macOS 10.15.5 上对我有用:不仅仅是挂起,GDB 错误出现在run

During startup program terminated with signal ?, Unknown signal

但至少它不会挂起。然后您可以重试run(或start)直到它起作用。