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

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

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

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

Ответы [ 19 ]

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

Добавьте изображение размером 5 МБ (bmp).

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

Напишите программу, которая генерирует много кода.

printf("000000000");
printf("000000001");
// ...
printf("010000000");
1 голос
/ 01 октября 2010

Признаюсь, я парень из Linux / UNIX. Можно ли статически связать исполняемый файл в Windows? Затем вы можете сослаться на некоторые тяжелые библиотеки и взорвать свой размер кода, сколько захотите, без необходимости писать много кода.

Еще одна идея, которую я обдумал, читая ваш комментарий к моему первому ответу, - добавление нулей в ваш файл. Как я уже сказал, я не эксперт по Windows, так что это может не сработать.

1 голос
/ 02 октября 2010

После того, как вы выполните все перечисленные здесь методы, скомпилируйте с флагом отладки и с самым высоким флагом оптимизации (gcc -g -O3).

0 голосов
/ 02 октября 2010

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

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

Вы можете сделать это:

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

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

Как правило, вы можете скопировать столько информации, сколько хотите, в конец исполняемого файла. Весь код / ​​ресурсы хранятся в виде смещений с начала файла, поэтому увеличение его размера не должно на это влиять.

(я предполагаю, что у вас есть dd в Windows. Если нет, получите его).

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

Если ничего не помогает, вы все равно можете создать исходный файл на ассемблере, в котором у вас есть соответствующее число db операторов, передающих байты в сегмент кода, и связать полученный объект кода с вашей программой как extern "C" { ... }.

Возможно, вам придется поиграть с компилятором / компоновщиком, чтобы компоновщик не мог оптимизировать этот фиктивный объект «кода».

0 голосов
/ 02 октября 2010

Статически свяжите wxWidgets с вашим приложением. Он мгновенно станет большим 5 МБ.

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

Используйте #define для определения множества макросов, которые содержат строку с огромной длиной, и используйте эти макросы внутри вашей программы во многих местах.

...