MASM 汇编中的“功能级链接”(即 COMDAT 生成)?

2024-01-11

有没有办法让 MASM 为函数生成 COMDAT,以便链接器删除未使用的函数?

(即我正在寻找相当于/Gy对于 MASM。)


并不简单,但可行;讨论过here http://www.asmcommunity.net//forums/topic/?id=9910 and here http://wayback.archive.org/web/20040212035208/http://www.launcherasm.com/technical/comdats.html.

第一步是将每个函数放入一个单独的段中,其名称如 .text$a、.text$b 等。这样,汇编器不会将它们合并到一个 .text 段中,但链接器最终会这样做; Microsoft 链接器中有一条关于节名称中 $ 字符之后的内容的特殊规则。汇编器将生成一个包含多个代码部分的 .obj 文件。我已经尝试过了,我可以确认它确实有效。至少 MASM 的一种风格可以。 :)

然后他们建议在目标文件上运行一个实用程序,将您的部分标记为 COMDAT。上述效用似乎随着时间和位衰减而消失,但其作用可以大致推断出来。它读取并解析 COFF .obj 文件,遍历各个部分并在所有 .text 部分上添加 COMDAT 标志。我认为这只是一面旗帜;还可以更多。作为重新创建的第一步,我建议使用 /Gy 编译一个 C 文件,然后不使用 /Gy,然后通过一些低级 PE/COFF 浏览器比较两个 .obj 文件。我没有走这么远,因为我的情况相当不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MASM 汇编中的“功能级链接”(即 COMDAT 生成)? 的相关文章

随机推荐