2013-03-14 88 views
1

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

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

我正在使用MASM并以x86为目标。

+1

MASM不支持功能级链接,所以没有简单的方法来做到这一点,据我所知。您可以添加一堆定义来确定要编译的代码的哪些部分,或将通用代码拆分为多个汇编文件,这些汇编文件将汇编为单独的对象文件。 – Michael 2013-03-14 13:21:59

+0

在'Makefile'中,您可以将每个输入文件复制到另一个名称,然后使用一些正则表达式[s](基于您的函数读取源代码中直接使用的函数的数据,例如awk或Perl)想要这次包括,并包括这些正则表达式过滤的副本,而不是完整的原始副本。 – nrz 2013-03-14 15:29:35

回答

2

要从一个目标文件中提取单独的函数,链接器需要知道每个函数的起始位置和结束位置。它不能可靠地告诉大会,所以你需要帮助它。

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

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

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

Function level linking with MASM

其他链接:

How to achieve "function level linking" with MASM?(包括一个半自动分割成几个文件的工具)。

flat assembler - COMDAT support

MSDN forums - Comdat

JWASM: Support for COFF COMDATs

最后一个环节提到了 “为COMDAT支持是jwasm 2.10补充。”

+0

我会试试看。谢谢 – Haunted 2013-03-14 17:22:24