アセンブリ プログラムで汎用的に使用するために、別のインクルード ファイルを作成しました。(文字列操作/フォーマットされた入力/など)これらのファイルを含めると、すべての関数がターゲットバイナリファイルに含まれていることに気付きます。
使用されている関数のみを含める方法はありますか (C/C++ ライブラリ ファイルでインクルード ファイルを使用するなど)。
MASM を使用し、x86 をターゲットにしています。
オブジェクト ファイルから個別の関数を抽出するには、リンカーは各関数の開始位置と終了位置を認識している必要があります。アセンブリからそれを確実に伝えることはできないため、あなたがそれを助ける必要があります。
一般的な方法は、各関数を個別のファイルに入れて、そのようにアセンブルすることです。このようにして、リンカーは各オブジェクト ファイルを個別に含めたり除外したりできます。これは最も簡単な方法であり、MASM だけでなくほとんどのアセンブラーで機能するので、試してみることをお勧めします。
別の方法として、各関数を個別のセグメントに入れることもできます。MS リンカは、未使用のセグメントを除外できますが、それらがいわゆる「COMDAT」(共有データ) としてマークされている場合のみです。残念ながら、MASM はこの属性の設定をサポートしていません。
後処理ステップとしてこの情報を OBJ ファイルに追加する作業がいくつかありましたが、残念ながらツールを含むアーカイブはインターネットから削除されたようです。
追加のリンク:
MASM で「機能レベルのリンク」を実現するにはどうすればよいですか? (いくつかのファイルに半自動で分割するためのツールが含まれています)。
最後のリンクには、「jwasm v2.10 で COMDAT のサポートが追加されました」と記載されています。