1

アセンブリでプログラムを作成し、結果の実行可能ファイルをできるだけ小さくしようとしています。私がやっていることのいくつかは、WriteProcessMemoryなどの関数へのWindowsAPI呼び出しを必要とします。私はこれらの関数を呼び出すことにある程度成功しましたが、コンパイルしてリンクした後、私のプログラムは14〜15KBの範囲で出力されます。(1 KB未満のソースから)私はそれよりはるかに少ないことを望んでいました。

私はこのような低レベルのことをするのは非常に新しいので、プログラムを小さくするために何をする必要があるのか​​本当にわかりません。exe形式自体がかなりのスペースを占めることを理解しています。それを最小限に抑えるために何かできることはありますか?

私はNASMとGCCを使用していることを言及する必要がありますが、それが役立つ場合は簡単に変更できます。

4

5 に答える 5

3

実行可能ファイルの最終的なサイズを縮小するために使用できる一連のヒントとコツについては、TinyPEを参照してください。その記事の後半のテクニックのいくつかは非常に壊れやすいことに注意してください。

于 2009-06-02T22:30:46.910 に答える
2

ほとんどの PE ファイルのデフォルトのセクション配置は、自然なシステム メモリ レイアウトに合わせて 4K です。.data、.text、および .resource セクションがある場合、それはすでに 12K です。そのほとんどは 0 であり、スペースの無駄になります。

この無駄を最小限に抑えるためにできることがいくつかあります。まず、セクション アラインメントを 512 バイトに減らします (nasm/gcc に必要なオプションがわからない)。次に、セクションをマージして、.text セクションが 1 つだけになるようにします。ただし、NX ビットがオンになっている最新のマシンでは、これが問題になる可能性があります。このセキュリティ機能は、ウイルスなどによるコードの実行可能セクションの変更を防ぎます。

PE を圧縮し、実行時に解凍する PE 圧縮ツールも多数あります。

于 2009-06-02T22:22:11.950 に答える
0

FWIW、MLまたはML64を使用して組み立てることができる最小のプログラムは、3kbのオーダーです。(これは、Hello Worldと言って終了するだけです。)

于 2009-06-03T06:52:57.797 に答える
0

小さな C プログラム (C++ ではない) をください。それを使って 1 ko .exe を作成する方法を紹介します。私が推奨する実行可能ファイルの最小サイズは 1K です。これは、少なくともこのサイズでないと一部の Windows で実行に失敗するためです。

リンカ スイッチを操作するだけで実現できます。これを行うのに適したリンカは polink です。

すべてを Assembly で行うと、さらに簡単になります。MASM32 フォーラムに行くだけで、このようなプログラムがたくさん見つかります。

于 2009-06-08T00:15:21.270 に答える
0

DumpBinユーティリティ (または GNU の objdump) を使用して、最も多くのスペースを占めるものを特定することをお勧めします。リソース ファイル、巨大なグローバル変数、またはそのようなものである可能性があります。

于 2009-06-02T22:12:27.850 に答える