调试用 yasm 创建的汇编代码
Posted
技术标签:
【中文标题】调试用 yasm 创建的汇编代码【英文标题】:Debugging assembly code created with yasm 【发布时间】:2012-04-29 11:58:51 【问题描述】:我需要一些帮助来寻找和使用一个好的调试器,用于在 64 位 Linux 上用 yasm 组装的 asm 代码。 gdb 调试器一直抱怨没有加载符号表。 *** 上的某个人建议使用 -dstabs 开关进行组装,但这对我来说没有什么区别。 ddd 也没有什么不同。
如果我能找到摆脱“未加载符号表”问题的方法,gdb 就不会那么糟糕了。我还需要能够查看寄存器和其他声明的内容。
我使用yasm -f elf -m amd64 file.asm
组装我的asm 文件并与ld file.o -o file
链接。使用 -l
开关使用 yasm 创建 .lst 文件似乎也不起作用。
我发现的关于这个问题的所有建议似乎都与使用 gcc 作为链接器而不是 ld 有关。我需要能够与 ld 关联。
【问题讨论】:
您在组装时是否尝试过使用-g
选项?
@Job:谢谢!我认为它奏效了。我从 gdb 获得了一些新信息。对我有用的是命令:yasm -f elf -m amd64 -g stabs file.asm
。 gdb_dbgfmts 的手册页建议 stabs 是适用于 UNIX 操作系统的调试格式,但我并不真正了解调试格式。有更好的选择吗?
我建议使用 dwarf,看我的回答。
【参考方案1】:
您应该将-g
选项用于yasm
。我建议使用dwarf2
格式,因为这似乎是当今的标准。
yasm -f elf -m amd64 -g dwarf2 file.asm
【讨论】:
感谢 dwarf2 的建议。它似乎解决了我在 gdb 中step
时跳过多行的问题。【参考方案2】:
我目前正在学习系统编程,我们使用ddd 进行调试,使用-g dwarf2
标志。到目前为止效果很好。
【讨论】:
ddd 只是 gdb 的 GUI 前端。 我知道...他说他想“查看寄存器和其他声明的内容”。也许您更喜欢必须在命令行中打印出变量和寄存器值的光荣混乱,但我发现为所有这些信息提供一个漂亮的小单独显示也很有帮助。 Gdb 是一个很好的调试器。他征求意见,我给了一个。请随时提出更好的建议,我总是乐于改进。以上是关于调试用 yasm 创建的汇编代码的主要内容,如果未能解决你的问题,请参考以下文章