我正在做一个使用微软工具链(cl.exe,ml.exe,link.exe)的项目,我试图将其移植到LLVM/clang,作为开源工作的一部分。移植C文件的编译已经足够简单了,但是弄清楚如何构建我们的许多*.asm文件(用MASM语法编写)却让我很为难。
我找不到让llvm工具(或nasm )从MASM源代码生成目标文件的方法。移植文件本身将是许多计划外的工作,如果可能的话,我需要避免这些工作,特别是因为它们中的许多不属于我们。
有什么建议吗?有没有什么晦涩难懂的命令行开关可以做到这一点?我听说过JWasm,但我还没有调查过它。如果从masm移植到nasm是唯一的选择,那么有什么准则可以简化转换吗?
发布于 2019-10-11 01:09:52
没有命令行选项可以让NASM、GAS或LLVM理解MASM语法和指令。
GAS .intel_syntax noprefix类似于MASM,因此您只需移植指令(如proc foo / end foo而不是foo: )。而不是dd 1234)和宏。我至少会将机器代码与MASM构建的目标文件进行比较,看看它是否以相同的方式组装。(可能是模数绝对地址)。或者至少比较反汇编,看看这两个版本是否反汇编回相同的指令。
我还没有尝试过JWasm,但这可能是你最好的选择。我认为它应该是真正汇编MASM语法的。从长远来看,你可能希望通过移植到GAS .intel_syntax来减少构建工作量,否则就继续使用JWasm,除非它被证明对可移植性或其他东西有负面影响。
汇编语言有更多的东西,而不仅仅是上面有指令的代码行。数据的对齐和布局可能很重要,任何区段/段的把戏以及使它们可执行还是不可执行都可能很重要。
https://stackoverflow.com/questions/58327530
复制相似问题