来自 NASM 的 %line 指令等效于 MASM
Posted
技术标签:
【中文标题】来自 NASM 的 %line 指令等效于 MASM【英文标题】:%line directive from NASM equivalent for MASM 【发布时间】:2021-07-26 17:40:24 【问题描述】:基本上,我正在编写一种简单的类 C 语言,可以直接输出 NASM 语法汇编程序。我可以在 VS 中调试它,但这有点痛苦。使用 MASM 可以更流畅地进行调试,但是 NASM 有一个 %line 指令,我可以在调试时将我的原始源代码链接到程序集(注意我实际上还没有让它工作)。
无论如何我都找不到在 Win 10 上调试 NASM 程序集或 MASM 中的 %line 指令的等效项(我可以在 VS 中调试)
非常感谢任何帮助。
【问题讨论】:
您应该能够将-gcv8
与 nasm 一起使用来生成符号。 Masm 从未设计为编译器的后端(VC++ 一直使用内部汇编器),因此它没有行号传递。
@TimRoberts 感谢您提供的信息。我已经尝试过了,但我看不出输出有什么不同。 NASM 应该生成一个带有符号的单独文件还是嵌入它们?
我相信它会生成一个.pdb
文件。调试符号格式用-F
(大写F)给出;您可以使用nasm -h
获取支持的格式列表。
@TimRoberts 非常感谢您的帮助!你非常亲近,帮助我走上了正确的道路!
【参考方案1】:
对于遇到此问题的其他人。
NASM 需要类似于下面的内容才能在 Windows 上获得调试输出。
nasm -g -F cv8 mymain.asm -f win64 -o mymain.obj
要使用符号并实际获取 pdb 文件,您需要告诉 LINK 将其提供给您。 /pdb:filename 和 /debug 都是必需的。
链接 /subsystem:console /pdb:mymain.pdb /debug /entry:mymain mymain.obj
【讨论】:
以上是关于来自 NASM 的 %line 指令等效于 MASM的主要内容,如果未能解决你的问题,请参考以下文章
NASM编译时有时出现 label or instruction expected at start of line
为啥 nasm 在寄存器之间组装 MOV 指令时使用 0x89?