【问题标题】:NASM debug symbols for Windows?Windows 的 NASM 调试符号?
【发布时间】: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


【解决方案1】:

您必须指定要包含在二进制文件中的调试格式(有时默认情况下没有)

尝试-gcv8 而不是-g

【讨论】:

    猜你喜欢
    • 2020-12-23
    • 2013-03-03
    • 1970-01-01
    • 2011-04-30
    • 2011-10-13
    • 2014-04-27
    • 2010-11-26
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多