c - 如何从 C 代码生成 MASM 格式的程序集
问题描述
我正在编写一个 C 程序,我想编译为程序集,进行修改,然后使用 MSVS 附带的 MASM 汇编程序将其编译为可执行文件。
我知道 MSVS 本身允许来自 C 程序的汇编输出,但我发现这些输出似乎添加或省略了代码,以至于 MASM 无法在不进行重大修改的情况下对其进行汇编。
有没有办法从一些 C 代码中生成 MASM 语法格式的程序集,我可以用 MASM 进行汇编,只需极少修改甚至无需修改?
解决方案
可以这样想:当您使用 MASM 时,您使用的是完全不同的语言,巧合的是,它在汇编代码中有一些重叠。
您可以要求 c 编译器向您显示生成的程序集,但该功能并非旨在用于交叉植入程序集代码:这只是为了避免您产生反汇编程序的麻烦,并手动提取您需要的位.
c 编译器旨在将您的 c 代码以及您甚至可能不知道的许多功能转换为执行您要求的某些机器代码。这意味着生成的代码可能包含更多的东西(例如 Helpers),并且可以链接到其他库(例如 msvc 运行时),因为这是 msvc 编译器的设计目的。
另一方面,如果您使用 MASM,则受众是需要控制一切的人。因此,您不再受益于 c 语言和运行时的特性和限制。
话虽如此,如果您需要这样做,请尽可能专注于使用在线汇编,因为您仍然可以使用 c 或 c++ 等高级语言,同时保留在需要时弄乱汇编代码的能力。
推荐阅读
- html - Angular 的条件之一是仅检查某些字符的密码字段 [! @$% & *]
- php - 如何在 laravel 中仅检查数据库中存储的复选框值?
- flutter - Flutter - 当我推送的页面被后退按钮弹出时如何得到通知?
- windows - 如何在 Windows 上创建每用户服务?
- scheduled-tasks - 为什么即使我通过设置 `spark.sql.shuffle.partitions` 更改默认配置,结构化流式处理的阶段大多有 200 个任务?
- openssl - 匿名密码不适用于 OpenSSL1.1.1-D
- amazon-web-services - AWS Glue Cloudformation 排除模式 排除:字符串
- java - 动态根元素 JAXB?
- python - 如何在 python 中的 elasticsearch 中索引大型 json 响应?使用 Elasticsearch DSL
- javascript - React-parent 组件正在输入子项的值 1 个字符丢失