MASM程序集中的“功能级链接”(即COMDAT生成)?

时间:2012-02-24 00:21:11

标签: visual-c++ masm assembly

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

(即我正在为MASM寻找/Gy的等价物。)

1 个答案:

答案 0 :(得分:1)

不是直截了当,但可行;讨论了herehere

第一步涉及将每个函数放入一个单独的段中,其名称类似于.text $ a,.text $ b等。这样,汇编程序不会将它们组合成单个.text段,但链接器最终会将; Microsoft链接器中有一条特殊的规则,关于段名中$字符的内容。汇编程序将发出包含多个代码段的.obj文件。我试过了,我可以确认它确实如此。 MASM至少有一种味道。 :)

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