Как сделать C ++ EXE больше (искусственно) - PullRequest
16 голосов
/ 01 октября 2010

Я хочу создать фиктивный файл Win32 EXE, который будет намного больше, чем должен быть. Таким образом, по умолчанию размер файла Win32 EXE-файла составляет 80 КБ. Я хочу 5 МБ для тестирования некоторых других утилит.

Первая идея заключается в добавлении ресурса, но, как оказалось, встроенные ресурсы не равны 5 МБ кода, когда речь идет о распределении памяти. Я думаю, что могу сослаться на большую библиотеку и в конечном итоге с огромным файлом EXE? Если нет, возможно, написание нескольких тысяч похожих методов, таких как AddNum1, AddNum2 и т. Д. И т. Д .?

Любые простые идеи очень ценятся.

Ответы [ 19 ]

16 голосов
/ 01 октября 2010

Как насчет простого определения большого статического массива символов?

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

См. Также мой другой ответ в этой теме, где я предлагаю статически ссылаться на большие библиотеки.Это наверняка вызовет реальный код, если вы просто ссылаетесь на достаточный код библиотек.

РЕДАКТИРОВАТЬ: Добавлена ​​ненулевая инициализация, так как данные, содержащие только нули, обрабатываются компилятором / компоновщиком оптимизированным способом.

РЕДАКТИРОВАТЬ: Добавлена ​​ссылка на мой другой ответ.

РЕДАКТИРОВАТЬ: Добавлен квалификатор const, поэтому многие компиляторы будут помещать большой массив среди кода.

9 голосов
/ 01 октября 2010

Если вы хотите увеличить размер файла, добавьте текстовый файл в конец исполняемого файла требуемого размера.

Я делал это, когда клиенты жаловались на маленьких бывших. Они не понимали, что маленькие бывшие так же профессиональны, как и большие. На самом деле в некоторых языках есть команда bloat () для увеличения размера exe, обычно в компиляторах BASIC.

РЕДАКТИРОВАТЬ: Нашел старую ссылку на фрагмент кода, который используют люди: http://www.purebasic.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

9 голосов
/ 01 октября 2010
char big[5*1024*1024] = {1};

Вам нужно инициализировать его чем-то отличным от 0, иначе компилятор / компоновщик может его оптимизировать.

8 голосов
/ 01 октября 2010

Заполните файл EXE с помощью NOP в ассемблере.

6 голосов
/ 01 октября 2010

Как насчет простого добавления двоичных нулей в конец .exe?

5 голосов
/ 01 октября 2010

Вы можете создавать большие статические массивы фиктивных данных.Это увеличит ваш exe-размер, но не будет реальным кодом.

4 голосов
/ 01 октября 2010

Использовать большой массив констант данных, таких как явные строки:

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;
}

И этот код, и его выходные данные компилируются без ошибок.

3 голосов
/ 01 октября 2010

Я обнаружил, что даже с оптимизацией необработанные строки сохраняются как есть в скомпилированном исполняемом файле.

Итак, путь:

  • перейти к http://lipsum.org/
  • сгенерировать много текста
  • добавить cpp в вашу программу
  • добавить статическую константную строку, в которой сгенерированный текст будет иметь значение
  • compile
  • проверьте размер.

Если у вашего компилятора есть ограничение размера необработанной строки (?), Просто создайте абзац для каждой статической строки.

Добавленный размердолжно быть легко угадать.

2 голосов
/ 01 октября 2010

Вы могли бы попытаться создать какой-то рекурсивный шаблон, который генерировал бы много разных экземпляров.Это может привести к значительному увеличению размера кода.

2 голосов
/ 01 октября 2010

Используйте Boost и скомпилируйте исполняемый файл с отладочной информацией.

...