1

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

有没有办法只包含使用过的函数(比如在 C/C++ 库文件中使用包含文件)?

我正在使用 MASM 并针对 x86。

4

1 回答 1

2

要从目标文件中提取单独的函数,链接器需要知道每个函数的开始位置和结束位置。它不能可靠地从装配中分辨出来,所以你需要帮助它。

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

另一种方法是将每个函数放入一个单独的段中;MS 链接器可以排除未使用的段,但前提是它们被标记为所谓的“COMDAT”(公共数据)。不幸的是,MASM 不支持设置此属性。

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

与 MASM 的功能级链接

附加链接:

如何用MASM实现“功能级联动”?(包括用于半自动拆分成多个文件的工具)。

平面汇编器 - COMDAT 支持

MSDN 论坛 - Comdat

JWASM:支持 COFF COMDAT

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

于 2013-03-14T14:46:22.833 回答