我已经在汇编程序中创建了一个单独的包含文件,用于通用目的。 (例如字符串操作/格式化输入/等) 当我包含这些文件时,我注意到所有函数都包含在目标二进制文件中。
我是否可以设法只包含使用过的函数(比如在C / C ++库文件中使用包含文件)?
我正在使用MASM并定位x86。
答案 0 :(得分:2)
要从目标文件中提取单独的函数,链接器需要知道每个函数的起始位置和结束位置。它无法从装配中可靠地告诉您,因此您需要帮助它。
一种常见的方法是将每个函数放入一个单独的文件中并像这样组装它们;这样,链接器可以独立地包括或排除每个目标文件。这是最简单的方法,适用于大多数汇编程序,而不仅仅是MASM,因此我建议您尝试使用它。
另一种方法是将每个函数放入一个单独的段中;如果MS链接器被标记为所谓的" COMDAT"那么MS链接器可以排除未使用的段,但仅。 (公共数据)。不幸的是,MASM不支持设置此属性。
有一些工作要将此信息作为后处理步骤添加到OBJ文件中,但不幸的是,使用该工具的存档似乎已从Internet上删除:
Function level linking with MASM
其他链接:
How to achieve "function level linking" with MASM?(包括一个半自动分割成多个文件的工具)。
flat assembler - COMDAT support
JWASM: Support for COFF COMDATs
最后一个链接提及"在jwasm v2.10中添加了对COMDAT的支持。"