Function 如何仅包含部件包含文件的节

Function 如何仅包含部件包含文件的节,function,assembly,include,x86,masm,Function,Assembly,Include,X86,Masm,我已经创建了一个单独的包含文件,用于汇编程序中的一般用途。(如字符串操作/格式化输入等) 当我包含这些文件时,我注意到所有函数都包含在目标二进制文件中 有没有办法只包含使用过的函数(比如在C/C++库文件中使用include文件) 我使用的是MASM,目标是x86。要从对象文件中提取单独的函数,链接器需要知道每个函数从何处开始,在何处结束。它无法从程序集可靠地区分这一点,因此您需要帮助它 一种常见的方法是将每个函数放在一个单独的文件中,然后像这样组装它们;这样,链接器可以独立地包含或排除每个对象

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

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


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

要从对象文件中提取单独的函数,链接器需要知道每个函数从何处开始,在何处结束。它无法从程序集可靠地区分这一点,因此您需要帮助它

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

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

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

其他链接:

(包括用于半自动拆分为多个文件的工具)


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

MASM不支持功能级链接,因此据我所知,没有简单的方法可以做到这一点。您可以添加一组定义来确定要编译代码的哪些部分,或者将通用代码拆分为多个程序集文件,并将其组装到单独的目标文件中。在
Makefile
中,您可以将每个输入文件复制到另一个名称,然后使用一些正则表达式过滤这些副本(直接从源代码读取函数的数据,例如使用awk或Perl)基于您希望这次包含的函数,并包含这些正则表达式过滤的副本,而不是完整的原始副本。