如何使C++ EXE更大(人为)

Phi*_*hil 16 c++ winapi executable crt

我想制作一个比它应该大得多的虚拟Win32 EXE文件.因此默认情况下,锅炉板Win32 EXE文件为80 KB.我想要一个5 MB的测试其他实用程序.

第一个想法是添加资源,但事实证明,在内存分配方面,嵌入式资源与5 MB代码不同.我想我可以引用一个大型库,最终得到一个巨大的EXE文件?如果没有,也许可以编写几千种类似的方法,如AddNum1,AddNum2等,等等?

任何简单的想法都非常感激.

Pet*_* G. 17

那么简单地定义一个大的静态char数组呢?

char const bigarray[5*1024*1024] = { 1 };
Run Code Online (Sandbox Code Playgroud)

另请参阅我在线程中的其他答案,我建议静态链接到大型库.如果您只是引用了足够的库代码,这肯定会引入实际代码.

编辑:添加了非零初始化,因为编译器/链接器以优化的方式处理仅包含零的数据.

编辑:添加了对我的其他答案的参考.

编辑:添加了const限定符,因此bigarray将被许多编译器放在代码中.

  • @Klaim,静态POD对象在链接时分配,这意味着它们在可执行文件中. (3认同)

Fer*_*cio 9

char big[5*1024*1024] = {1};
Run Code Online (Sandbox Code Playgroud)

您需要将其初始化为0以外的值,否则编译器/链接器可能会对其进行优化.

  • 这是真的,但就这个问题而言,它的初始化并不重要.将第一个元素设置为非零值似乎足以阻止编译器优化该变量.换句话说,当你将它设置为全零时,编译器只是说"这里应该有500万个零".虽然这迫使它说"有一个,然后是零,然后是零......" (2认同)

Gar*_*hby 9

如果是要增加的文件大小,则将文本文件附加到所需大小的exe的末尾.

当客户抱怨小前辈时,我常常这样做.他们没有意识到小前辈和大前辈一样专业.实际上在某些语言中有一个bloat()命令来增加exes的大小,通常是在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

  • 什么??!!客户抱怨小型EXE?我认为我从来没有打过一个愚蠢的顾客. (3认同)
  • 是的,信不信由你!它类似于沉重的相机.它越重,它就越"好"!膨胀初始程序发布以及每次连续更新都会因进一步优化而占用更少的内存占用空间!;) (2认同)

Ben*_*nny 8

在汇编程序中使用NOP填充EXE文件.

  • 我打算这样做. (3认同)

Joh*_*ski 6

如何在.exe的末尾添加二进制零呢?

  • 为什么不添加一些十六进制零?那些更大:P. (11认同)

jv4*_*v42 5

您可以创建虚拟数据的大型静态数组.这会碰到你的exe大小,但不会是真正的代码.

  • 当我看到这个问题时,我也想到了这一点,但是它不会被优化掉吗? (2认同)

Edg*_*net 5

使用大量常量数据,例如显式字符串:

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

与变量数据不同,常量数据通常与实际代码位于同一内存部分,尽管这可能取决于编译器或链接器。

编辑:我测试了以下内容,它可以在 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;
}
Run Code Online (Sandbox Code Playgroud)

这段代码及其输出都可以干净地编译。