GDB-将来共享库加载时挂起的断点

时间:2018-11-06 07:41:33

标签: assembly gdb

我正在尝试在GDB中运行一个非常简单的链接文件。

我做了以下动作:

(gdb) break _start
Breakpoint 1 at 0x4000b0
(gdb) start
Function "main" not defined.
**Make breakpoint pending on future shared library load? (y or [n]) ?**

但是标签 _start 不在任何共享库中,而仅在生成可执行文件的汇编代码中。 GDB为什么问这个?

1 个答案:

答案 0 :(得分:4)

GDB start命令在main的开头设置一个断点,然后运行程序。大概您的程序没有main符号。

仔细阅读错误消息,指出Function "main" not defined.处的断点已设置;如果那是问题,您会在 that 命令之后看到提示,并且不会看到数字地址。 (尝试使用_startb xyz。)


您正在寻找b printf命令,该命令只是运行该程序而不在其中寻找任何符号。

在GDB中使用runhelp start来查看它们的作用。

或在线文档:https://sourceware.org/gdb/onlinedocs/gdb/Starting.html

  • help run:仅启动程序,没有添加新的断点。
  • run:在start之前的main中设置一个一次性断点。对于已编译的C / C ++或定义run并使用标准CRT启动文件的手写asm很有用。这就是您尝试使用的方式。
  • main:在该过程的第一个asm指令处停止。对于不带符号的PIE可执行文件特别有用,如果启用了ASLR,则在ASLR选择它之前,入口点数字地址才是已知的。 (GDB的默认行为是禁用ASLR)。

starti是一个相对较新的功能;在此之前,一种常见的技巧是使用starti,这会在流程开始后,任何指令执行之前立即导致错误。 Stopping at the first machine code instruction in GDB