我有一个编译为9.5k的C ++程序。我希望它超过1MB。我做了以下操作将其填充到大约18k,但是这样做到1MB会很难。
代码无法访问,但由于编译器优化,我不得不让它看起来可以访问,因此bool会发生变化。
#include "stdafx.h"
#include <iostream>
using namespace std;
void main(int argc, char* argv[])
{
bool a = false;
cout << endl << "Passed parameters";
for (int i = 0 ; i < argc ; i++)
{
if(i == 0)
{
cout << endl << "Run Path (Arg0): " << argv[i];
a=true;
}
else
{
cout << endl << "Arg" << i << ": " << argv[i];
if(a){a=false;}
}
}
cout << endl << endl;
system("pause");
if (a){
string pad1 = "padpadpadpadpadpadpadpadpadpadpadpadpadpadp1adpadpadpadpadpa";
string pad2 = "dapdapdapdapdapdapdapdapd2apdapdapdapdapdapdapdapdapdapdapd";
string pad3 = "dipdipdipdipdipdipdipdipdipdipd3ipdipdipdipdipdipdipdipdip";
string pad4 = "dipdipdipdi4pdipdipdipdipdipdipdipdipdipdipdipdipdipdipdip";
string pad5 = "dipdipdipd5ipdipdipdipdipdipdipdipdipdipdipdipdipdipdipdip";
string pad6 = "dipdipdipd6ipdipdipdipdipdipdipdipdipdipdipdipdipdipdipdip";
string pad7 = "dipdipdipd7i1pdipdipdipdipdipdipdipdipdipdipdipdipdipdipdip";
string pad8 = "dipdipdip8dipdipdip1dipdipdipdipdipdipdipdipdipdipdipdipdip";
string pad9 = "dipdipdipd9ipdipdipdipdip1dipdipdipdipdipdipdipdipdipdipdip";
string pad10= "padpadpadpadpadpadpadpadpadpadp1adpadpadpadp1adpadpadpadpadpa";
string pad11= "dapdapdapdapdapdapdapdapd2apdapdapdapdapdap1dapdapdapdapdapd";
string pad12= "dipdipdipdipdipdipdipdipdipdipd3ipdipdipdipdipdipdip1dipdip";
string pad13= "dipdipdipdi4pdipdipdipdipdipdipdipdipdipdipdipdipdi1pdipdip";
string pad14= "dipdipdipd5ipdipdipdipdipdipdipdipdipd2ipdipdi1pdipdipdipdip";
string pad15= "dipdipdipd6ipdipdipdip2dipdipdipdipdipdipdip1dipdipdipdipdip";
string pad16= "dipdipdipd7ipdipdipdip2dipdipdipdipdip1dipdipdipdipdipdipdip";
string pad17= "dipdipdip8dipdipdipdipdipdipd2ipdip1dipdipdipdipdipdipdipdip";
string pad18= "dipdipdipd9ipdipdipdip1dipdipdipdipdipdi2pdipdipdipdipdipdip";
string pad19= "padpadpadpadpadpadpadpadpadpadpad2padpadpadp1adpadpadpadpadpa";
string pad20= "dapdapdapdapdapd2apdapdapd2apdapdapdapdapdapdapdapdapdapdapd";
string pad21= "dipdipdipdipdipd2ipdipdi2pdipdipd3ipdipdipdipdipdipdipdipdip";
string pad22= "dipdipdipdi4pdipdipdipd2ipdipdipdipdipdipdipdipdipdipdipdip";
string pad23= "dipdipdipd5ipdip2dipdipdipdipdipdipdipdipdipdipdipdipdipdip";
string pad24= "dipdipdipd6ipdipdipdi2pdipdipdipdipdipdipdipdipdipdipdipdip";
string pad25= "dipdipdipd7i1pdipdipdipdipdipdip2dipdipdipdipdipdipdipdipdip";
string pad26= "dipdipdip8dipdipdip1dipdipdip1dipdipdipdipdipdipdipdipdipdip";
string pad27= "dipdipdipd9ipdipdipd1ipdip1dipdipdipdipdipdipdipdipdipdipdip";
string pad28= "padpadpadpadpadpadpadpadp1adpadp1adpadpadpadp1adpadpadpadpadpa";
string pad29= "dapdapdapdapdapdapdapdapd2apdapdapdapdapda1p1dapdapdapdapdapd";
string pad30= "dipdipdipdipdipdipdipdipdipdipd3ipdipd1ipdipdipdipdip1dipdip";
string pad31= "dipdipdipdi4pdipdipdipdipdipdipdi1pdipdipdipdipdipdi1pdipdip";
string pad32= "dipdipdipd5ipdipdipdi1pdipdipdipdipdipdipdipdi1pdipdipdipdip";
string pad33= "dipdipdipd6ipdipdipdip1dipdipdipdipdipdipdip1dipdipdipdipdip";
string pad34= "dipdipdipd7ipdipdipdipdip1dipdipdipdip1dipdipdipdipdipdipdip";
string pad35= "dipdipdip8dipdipdipdipdipdipdi1pdip1dipdipdipdipdipdipdipdip";
string pad36= "dipdipdipd9ipdipdipdip1dipdipdipd1ipdipdipdipdipdipdipdipdip";}
return;
}
答案 0 :(得分:14)
试试这个:
char waste[1024*1024] = {1};
至少在我的TDM-GCC(在Win7上),输出大1 MB;如果你写
char waste[1024*1024] = {0};
它将被优化(产生27kB)。
答案 1 :(得分:8)
使用静态可执行文件(-static
的{{1}}标志)进行编译并添加系统包含,直到超过1MB。我认为你可以用Windows做同样的事情,但我没有在Windows中编程,所以我可能错了,但这里有一个链接,似乎描述了如何:http://www.geekadmin.com/?p=34
答案 2 :(得分:4)
有一个简单的解决方案: 您可以将一些数据文件附加到.exe文件中。 Windows抱怨发布者不明,但确认后执行程序没有问题。
答案 3 :(得分:2)
也许你可以创建一个大小为1MB的文件,并将所有信息读入一些变量或数据结构。
或者你可以创建一些数据结构并在循环中写入一堆垃圾。请注意,这可能会使您的程序显着变慢。
答案 4 :(得分:2)
int main(){}
char lol[1024*1024] = { 1 };
请注意,char lol[1024*1024];
是不够的,否则编译器只会告诉操作系统创建一个零填充区域。通过这种方式,程序中嵌入了1MB无意义的堆。
答案 5 :(得分:1)
通过在编译时静态分配内存,可以使可执行脚印变大。例如,只需添加:
static char padding[1024 * 1024] = {1};
这将静态分配存储而不是在运行时分配存储,如果省略数组中第一个内存插槽的初始化值,则会发生这种情况。换句话说,如果没有显式编译时初始化为非零值,则该数组存储在目标文件的.bss
部分中,因此链接器仅存储一个选项卡以指示它需要的OS运行时在执行时为数组分配内存,而不是在目标文件的.data
部分静态分配内存,这将在可执行文件本身中为数组创建内存占用。