Windows 上最小的「HelloWorld.exe」能有多小?

不清楚题主所要求的跟那段C代码等价究竟是效果等价(控制台输出Hello World就行),还是要求完全等价(必须调用libc的printf来输出Hello World)。

姑且认为是前一种吧。

1. 首先用汇编写出等价的程序

编译出来以后,是2560字节。太大了。

2. 用PEditor查看一下

发现每个section都很小,但是raw size都是200h。

那就把这些section合并起来好了。

3.修改连接参数

加入这些

/MERGE:.data=.text /MERGE:.rdata=.text /SECTION:.text,RWE

大意就是,把.data和.rdata这两个section合并到.text里,并且把.text设置成可读可写可执行

4.重新编译,发现变成1024字节了。

5.用PEditor的rebuild功能,除去程序中间的空隙

变成684字节了

6.上图


PS:其实还是有压缩的空间的。比如PE头中有很多的0,可以让一部分地址重叠来达到瘦身的目的。水平有限,到此为止了。


PS2:

Tiny PE

看这篇文章吧,比我这个靠谱多了

PS3: 发现炸出来好多大神…… 这篇其实是灌水,建议认真读一下 @

frank yao

@Starve Jokes

的答案。还有

@tombkeeper

大神别卖关子了……

编辑于 2015-08-08 17:42

Published

Category

Zhihu

Tags