生成很大的可执行文件

2020-04-27

当我们想生成很大的可执行文件时,我们应该怎么操作呢?

我们都知道,可执行文件,或者说elf/bin文件中,保存的是代码段和数据段。bbs段在文件中不体现大小,而局部变量也是放在栈上的,在文件中也体现不出大小。

因此,要让elf/bin文件变大,有几种选择:

  • 让数据段变大
  • 让代码段变大

让代码段变大,不是很好弄,毕竟难道要不停敲代码吗?我又不是键盘侠!那么,就让数据段变大吧!让数据段变大:

写一个很大的全局变量数组

但这要如何实现呢?

int test[1000];

但这样,没有初始化的全局变量会被放到.bss段,因此我们在链接脚本里需要把.bss段也放到.data段才行。但,有没有更简单的方法?

int test[1000] = {666,};

如果像上面这个样子,有时候可行,但很多时候,elf/bin并不会变大。那么,我们可以这样:

int test[1000] = {[0 ... 1000-1] = 666};

这是C语法新特性,它的意思是,对test数组的1000成员分别赋值为666,是不是很简单?也很神奇!