【发布时间】:2016-01-24 07:05:13
【问题描述】:
我正在尝试在 Windows 上学习 x86 汇编。我可以使用以下方法成功组装和链接程序:
nasm -f win32 -g sandbox.asm -l sandbox.lst
ld -mi386pe -o sandbox.exe sandbox.obj
但是当我尝试使用 gdb 运行我的程序时,它说它找不到调试符号。 Nasm 说只有“空”调试符号格式可用于 win32。这是否意味着它不能为 Windows 生成调试符号?如果是这样,那么如何在 Windows 上调试我的程序?
这是我正在使用的示例程序:
section .data
section .bss
section .text
global start
start:
mov ebp, esp
mov eax, 0
ret
【问题讨论】:
-
你能发布最简单的
.asm程序来重现这个问题吗? -
那里,我发布了代码。
-
您总是可以使用
nasm -f elf -g sandbox.asm -l sandbox.lst将其编译为elf格式并使用ld -mi386pe -o sandbox.exe sandbox.o将其链接为Windows PE 文件(注意sandbox.obj现在是sandbox.o) -
@SeanRamey 无法为
-g -f win32生成调试信息。见Manual 2.1.12。但@MichaelPetch 有你的解决方案。 -
@MichaelPetch 非常感谢!但是,现在我想知道为什么会这样?我认为精灵目标文件无法在 Windows 上组装和链接并且仍然可以工作?链接器是否将其转换回 Win32 之类的?另外,您为什么不继续正式添加您对我的问题的答案,以便获得荣誉?
标签: windows debugging gdb nasm