如何人为地增加 C++ 可执行文件的大小

17

我想制作一个虚拟的Win32 EXE文件,比它原本的大小要大得多。正常情况下,一个样板Win32 EXE文件大小为80KB。我想制作一个5MB大小的EXE文件来测试其他实用程序。

第一个想法是添加资源,但事实证明,嵌入式资源与内存分配时的5MB代码不一样。我在考虑是否可以引用一个大型库并最终获得一个巨大的EXE文件?如果不行,也许可以编写几千个类似的方法,如AddNum1、AddNum2,等等。

任何简单的想法都非常欢迎。


6
你能告诉我们你希望解决什么问题吗? - Francesco
1
这个问题并没有明确它的目的,因此答案对他人帮助不大。 - frast
1
为问题增加更多内容: - Phil
1
我正在调用CreateProcess函数。在这样做时,我需要它分配比简单(空)win32项目更多的内存。在这种情况下,我希望CreateProcess加载目标win32可执行文件并为其分配5MB的内存。 - Phil
3
请使用“编辑”按钮来为您的帖子添加更多细节。 - Hello71
19个回答

1
编写一个生成大量代码的程序。
printf("000000000");
printf("000000001");
// ...
printf("010000000");

是的,这是产生大量额外代码的最明显方式(与静态数据不同)。您还可以使用复制和粘贴来实现它,并依赖于粘贴键。 - ChrisW
1
@ChrisW:如果你在使用复制和粘贴,指数级的复制和粘贴比依赖于一个键更好:Ctrl-A,C,V,V,重复log(n)次。 - Amnon

1

如果所有其他方法都失败了,您仍然可以创建一个汇编语言源文件,在其中有适当数量的db语句将字节发射到代码段,并将生成的代码对象链接到程序作为extern "C"{...}

您可能需要调整编译器/链接器以防止链接器优化掉该虚拟的“代码”对象。


1

我承认,我是个Linux/UNIX人。在Windows中是否可能静态链接可执行文件?这样,您就可以引用一些庞大的库并增加代码大小,而无需自己编写太多代码。

另一个想法是,在阅读您对我的第一个答案的评论时,我考虑将零附加到您的文件中。如上所述,我不是Windows专家,因此这可能行不通。


1
“在Windows中,是否有可能静态链接可执行文件?”--是的,但是链接器只会将应用程序所需(引用)的库对象链接/包含进来。 - ChrisW
@ChrisW:在 Linux 中可能会有一个像“--whole-archive”的选项,强制链接器包含所有内容。 - ThR37

1

添加一张5MB(bmp)的图片。


1

在执行此处列出的所有方法后,使用调试标志和最高优化标志(gcc -g -O3)进行编译。


0
使用 #define 定义许多包含大量字符的宏,然后在程序中的多个位置使用这些宏。

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。如果没有,请获取它)。

0
编写一个代码生成器,可以生成任意随机函数。唯一的技巧是确保它不会被优化掉,在分离编译中这应该不难。

0

将wxWidgets静态链接到您的应用程序中。 它会立即变成5 MB大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接