我为我的汇编程序中的通用用途创建了一个单独的包含文件。(例如字符串操作/格式化输入/等。)当我包含这些文件时,我注意到所有函数都包含在目标二进制文件中。
有没有办法只包含使用过的函数(比如在 C/C++ 库文件中使用包含文件)?
我正在使用 MASM 并针对 x86。
要从目标文件中提取单独的函数,链接器需要知道每个函数的开始位置和结束位置。它不能可靠地从装配中分辨出来,所以你需要帮助它。
一种常见的方法是将每个函数放入一个单独的文件中,然后像这样组装它们;这样,链接器可以独立地包含或排除每个目标文件。这是最简单的方法,适用于大多数汇编程序,而不仅仅是 MASM,所以我建议尝试一下。
另一种方法是将每个函数放入一个单独的段中;MS 链接器可以排除未使用的段,但前提是它们被标记为所谓的“COMDAT”(公共数据)。不幸的是,MASM 不支持设置此属性。
已经有一些工作是将此信息添加到 OBJ 文件作为后处理步骤,但不幸的是,该工具的存档似乎从 Internet 上消失了:
附加链接:
如何用MASM实现“功能级联动”?(包括用于半自动拆分成多个文件的工具)。
最后一个链接提到“jwasm v2.10 中添加了对 COMDAT 的支持”。