17

本来よりもはるかに大きいダミーの Win32 EXE ファイルを作成したいと考えています。したがって、デフォルトでは、ボイラー プレートの Win32 EXE ファイルは 80 KB です。他のユーティリティをテストするために 5 MB が必要です。

最初のアイデアはリソースを追加することですが、メモリ割り当てに関しては、組み込みリソースは 5 MB のコードと同じではないことがわかりました。大規模なライブラリを参照して、巨大な EXE ファイルになってしまうと思いますか? そうでない場合は、おそらく AddNum1、AddNum2 などのような数千の同様のメソッドをスクリプト化しますか?

どんな簡単なアイデアでも大歓迎です。

4

19 に答える 19

18

単純に大きな静的 char 配列を定義するのはどうですか?

char const bigarray[5*1024*1024] = { 1 };

このスレッドの他の回答も参照してください。ここでは、大きなライブラリに静的にリンクすることをお勧めします。ライブラリの十分なコードを参照するだけであれば、これは確かに実際のコードを引き込みます。

編集:ゼロ以外の初期化を追加しました。これは、ゼロのみを含むデータがコンパイラ/リンカーによって最適化された方法で処理されるためです。

編集:他の回答への参照を追加しました。

編集: const 修飾子を追加したため、bigarray は多くのコンパイラによってコード内に配置されます。

于 2010-10-01T15:02:25.333 に答える
9

増やしたいファイル サイズの場合は、必要なサイズの exe の末尾にテキスト ファイルを追加します。

顧客が小さな exe について不満を言うとき、私はこれを行っていました。彼らは、小さなexeが大きなexeと同じくらいプロフェッショナルであることを認識していませんでした. 実際、一部の言語では、通常は BASIC コンパイラで、exe のサイズを大きくする bloat() コマンドがあります。

編集: 人々が使用するコードへの古いリンクを見つけました: http://www.purabasic.fr/english/viewtopic.php?f=12&t=38994

例: https://softwareengineering.stackexchange.com/questions/2051/what-is-the-craziest-stupidest-silliest-thing-a-client-boss-asked-you-to-do/2698#2698

于 2010-10-01T15:45:02.017 に答える
9
char big[5*1024*1024] = {1};

0 以外に初期化する必要があります。そうしないと、コンパイラ/リンカーによって最適化される可能性があります。

于 2010-10-01T15:10:45.210 に答える
8

アセンブラで EXE ファイルに NOP を入力します。

于 2010-10-01T15:32:59.533 に答える
6

.exe の末尾に 2 進ゼロを追加するのはどうですか?

于 2010-10-01T15:20:15.357 に答える
5

ダミー データの大きな静的配列を作成できます。それはあなたのexeサイズを増やしますが、実際のコードではありません。

于 2010-10-01T15:02:16.783 に答える
5

明示的な文字列など、定数データの大きな配列を使用します。

char *dummy_data[] = {
    "blajkhsdlmf..(long script-generated random string)..",
    "kjsdfgkhsdfgsdgklj..(etc...)...jldsjglkhsdghlsdhgjkh",
};

変数データとは異なり、定数データは多くの場合、実際のコードと同じメモリ セクションに配置されますが、これはコンパイラまたはリンカーに依存する場合があります。

編集:以下をテストしましたが、Linuxで動作します:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int i, j;

    puts("char *dummy_data[] = {");
    for (i = 0; i < 5000; i++) {
        fputs("    \"", stdout);
        for (j = 0; j < 1000; j++) putchar('a' + rand() % 26);
        puts("\",");
    }
    puts("};");
    return 0;
}

このコードとその出力はどちらも問題なくコンパイルされます。

于 2010-10-01T15:18:08.847 に答える
3

最適化を行っても、生の文字列がコンパイル済みの実行可能ファイルにそのまま保持されることがわかりました。

したがって、行く方法は次のとおりです。

  • http://lipsum.org/にアクセスしてください
  • 多くのテキストを生成する
  • プログラムに cpp を追加する
  • 生成されたテキストを値として持つ static const 文字列を追加します
  • コンパイル
  • サイズを確認してください。

コンパイラに生の文字列サイズの制限がある場合 (?)、静的文字列ごとに段落を作成します。

追加されたサイズは推測しやすいはずです。

于 2010-10-01T15:29:47.437 に答える
3

多くの異なるインスタンス化を生成する、ある種の再帰的なテンプレートを作成してみることができます。これにより、コード サイズが大幅に増加する可能性があります。

于 2010-10-01T15:30:04.133 に答える
2

Boostを使用して、デバッグ情報を使用して実行可能ファイルをコンパイルします。

于 2010-10-01T15:48:37.907 に答える
1

ここにリストされているすべての方法を実行したら、デバッグ フラグと最高の最適化フラグ ( gcc -g -O3) を使用してコンパイルします。

于 2010-10-01T20:13:29.433 に答える
1

大量のコードを生成するプログラムを作成します。

printf("000000000");
printf("000000001");
// ...
printf("010000000");
于 2010-10-01T15:15:20.807 に答える
1

認めますが、私は Linux/UNIX 派です。Windows で実行可能ファイルを静的にリンクすることは可能ですか? 次に、いくつかの重いライブラリを参照して、自分で多くのコードを作成することなく、コード サイズを好きなだけ大きくすることができます。

最初の回答に対するあなたのコメントを読んでいるときに考えたもう 1 つのアイデアは、ファイルにゼロを追加することです。前述のとおり、私は Windows の専門家ではないため、これは機能しない可能性があります。

于 2010-10-01T15:36:32.763 に答える
1

5MB (bmp) の画像を追加します。

于 2010-10-01T16:42:44.313 に答える
1

他のすべてが失敗した場合でも、適切な数のdbステートメントをコード セグメントに出力するアセンブリ言語ソース ファイルを作成し、結果のコード オブジェクトを としてプログラムにリンクすることができますextern "C" { ... }

リンカーがそのダミーの「コード」オブジェクトを最適化するのを防ぐために、コンパイラ/リンカーをいじる必要があるかもしれません。

于 2010-10-01T15:28:16.473 に答える
0

wxWidgetsをアプリケーションに静的にリンクします。すぐに5MBのサイズになります。

于 2010-10-01T20:29:01.863 に答える
0

あなたはこれを行うことができます:

REM generate gibberish of the desired size
dd if=/dev/random of=entropy count=5000k bs=1
REM copy the entropy to the end of the file
copy /b someapp.exe + entropy somefatapp.exe

バッチ ファイルの場合は、コンパイル後の手順として追加することもできるため、自動的に実行されます。

通常、exe の最後に必要なだけ多くの情報をコピーできます。すべてのコード/リソースはファイルの先頭からのオフセットとして保存されるため、サイズを大きくしても影響はありません。

(Windowsにddがあると仮定しています。ない場合は入手してください)。

于 2010-10-01T17:04:06.913 に答える
0

任意の乱数関数を生成するコード ジェネレーターを作成します。その場合の唯一の秘訣は、最適化されないようにすることと、難しくないはずの個別のコンパイルを行うことです。

于 2010-10-01T20:07:54.403 に答える
0

#define を使用して、非常に長い文字列を保持する多数のマクロを定義し、それらのマクロをプログラム内のさまざまな場所で使用します。

于 2010-10-01T15:32:32.983 に答える