GDB - 未来共享库加载时的断点

问题描述 投票:0回答:1

我正在尝试在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会问这个?

assembly gdb
1个回答
4
投票

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

仔细阅读错误信息,它说Function "main" not defined. _start的断点已经设定;如果那是你在该命令后看到提示的问题,并且不会看到数字地址。 (尝试使用b xyzb printf。)


你正在寻找run命令,它只运行程序而不查找其中的任何符号。

在GDB中使用help starthelp run来查看它们的作用。

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

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

starti是一个相对较新的功能;在此之前,一个常见的黑客是使用b *0,这会在任何指令执行之前在进程启动后立即导致错误。 Stopping at the first machine code instruction in GDB

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.