如何仅包含程序集包含文件的部分



我在汇编程序中创建了一个单独的包含文件,用于一般用途。(如字符串操作/格式化输入等)当我包含这些文件时,我注意到所有的函数都包含在目标二进制文件中。

是否有办法我可以管理只包括使用的函数(如在C/c++库文件中使用包含文件)?

我使用的是MASM,目标是x86。

要从对象文件中提取单独的函数,链接器需要知道每个函数的开始位置和结束位置。它不能可靠地从程序集中判断,所以你需要帮助它。

一种常见的方法是把每个函数放到一个单独的文件中,然后像这样组装它们;通过这种方式,链接器可以独立地包含或排除每个目标文件。这是最简单的方法,适用于大多数汇编器,而不仅仅是MASM,所以我建议尝试一下。

另一种方法是将每个函数放入单独的段中;MS链接器可以排除未使用的段,但如果被标记为所谓的"COMDAT"(公共数据),则只能排除。遗憾的是,MASM不支持设置此属性。

作为后处理步骤,已经有一些工作将此信息添加到OBJ文件中,但不幸的是,带有该工具的存档似乎从互联网上消失了:

功能级别与MASM的链接

附加链接:

如何实现与MASM的"功能级链接"?(包括一个半自动分割成几个文件的工具)。

平面汇编器- COMDAT支持

MSDN论坛-数据

JWASM:对COFF字符的支持

最后一个链接提到"在jwasm v2.10中添加了对COMDAT的支持。"

最新更新