此问题在此处已有答案:
GDB does not load source lines from NASM(3个答案)
上个月关门了。
我开始编写linux x86_64汇编代码,因此我试图像普通C代码一样进行调试,例如,当我运行gdb -tui ./a.out
时,我得到了我的源代码,然后我可以切换寄存器来查看发生了什么,并一步一步地进行调试,等等。
然而,当我用汇编二进制代码时,情况就不是这样了,我只是得到了[ No Source Available ]
。然而,我可以看到寄存器和产生的汇编代码(假设我做的是layout next
)。问题是,由于我在代码中间使用了C函数(主要是printf
,以便简化IO过程,正如我的教授所指示的);我想看看我的原始汇编代码。目前我已经安装了:
- 通用合同条款:(GCC)12.2.0
- (GNU二进制文件)2.39.0
- NASM版本2.15.05
编译并运行我运行的程序:
nasm -f elf64 -o hello.o hello.asm
gcc hello.o -o hello -no-pie
gdb ./hello
这些是我的老师告诉我们要运行的命令。我在网上读到过,我可以将-g标志传递给gcc来调试我的代码;它编译得很好,但是我也看不到我的源代码。我也尝试过将-g传递给nasm(同样的问题,编译了但是没有源代码)
是否有我不能通过的标志/设置?
1条答案
按热度按时间but5z9lq1#
只需告诉NASM使用
-g
编译源代码以添加调试符号:打开GDB后,您可以使用
list
显示源代码:下面是一个source code示例: