首页 > 解决方案 > 如何从 C 代码生成 MASM 格式的程序集

问题描述

我正在编写一个 C 程序,我想编译为程序集,进行修改,然后使用 MSVS 附带的 MASM 汇编程序将其编译为可执行文件。

我知道 MSVS 本身允许来自 C 程序的汇编输出,但我发现这些输出似乎添加或省略了代码,以至于 MASM 无法在不进行重大修改的情况下对其进行汇编。

有没有办法从一些 C 代码中生成 MASM 语法格式的程序集,我可以用 MASM 进行汇编,只需极少修改甚至无需修改?

标签: cvisual-studioassemblymasm

解决方案


可以这样想:当您使用 MASM 时,您使用的是完全不同的语言,巧合的是,它在汇编代码中有一些重叠。

您可以要求 c 编译器向您显示生成的程序集,但该功能并非旨在用于交叉植入程序集代码:这只是为了避免您产生反汇编程序的麻烦,并手动提取您需要的位.

c 编译器旨在将您的 c 代码以及您甚至可能不知道的许多功能转换为执行您要求的某些机器代码。这意味着生成的代码可能包含更多的东西(例如 Helpers),并且可以链接到其他库(例如 msvc 运行时),因为这是 msvc 编译器的设计目的。

另一方面,如果您使用 MASM,则受众是需要控制一切的人。因此,您不再受益于 c 语言和运行时的特性和限制。

话虽如此,如果您需要这样做,请尽可能专注于使用在线汇编,因为您仍然可以使用 c 或 c++ 等高级语言,同时保留在需要时弄乱汇编代码的能力。


推荐阅读