我正在尝试在 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]) ?**
Run Code Online (Sandbox Code Playgroud)
但是,标签_start不在任何共享库中,而只是在生成可执行文件的汇编代码中。为什么GDB会问这个?
GDBstart命令在 的开头设置断点main,然后运行程序。大概你的程序没有main符号。
仔细阅读错误信息,它说Function "main" not defined. The Breakpoint at _startis already set;如果这是问题所在,您会在该命令之后看到提示,并且不会看到数字地址。(尝试使用b xyz或b printf。)
您正在寻找run命令,该命令仅运行程序而不查找其中的任何符号。
在 GDB 中使用help start和help run来看看它们的作用。
或在线文档:https://sourceware.org/gdb/onlinedocs/gdb/Starting.html
run:只是启动程序,没有添加新的断点。startmain:在before中设置一次性断点run。对于编译的 C/C++ 或定义main并使用标准 CRT 启动文件的手写 asm 很有用。这就是您尝试使用的。starti: 在进程的第一条 asm 指令处停止。对于没有符号的 PIE 可执行文件特别有用,如果在启用 ASLR 的情况下运行它,则在 ASLR 选择入口点数字地址之前才知道它。(GDB 默认行为是禁用 ASLR)。starti是一个相对较新的功能;在此之前,一种常见的黑客方法是使用b *0,这会在进程启动后、任何指令执行之前立即导致错误。 在 GDB 中的第一条机器代码指令处停止
| 归档时间: |
|
| 查看次数: |
4676 次 |
| 最近记录: |