use*_*390 0 c++ optimization winapi
我正在开发一个非常大的项目,我需要在每次新的构建时将exe上传到某人,并且我的连接是通过电话调制解调器.
我想为一个运行代码的应用程序编译最小的exe: MessageBox(0, "Hello", 0, MB_OK);
我正在使用Visual Studio 2010.到目前为止我的尝试:
版本0,大小和开关:
7kB(发布)
使用:\ O1
版本1,尺寸和开关:
3kB(发布)
使用:\ O1,关闭缓冲区安全检查,忽略默认库链接.
这可以做到甚至小于3kB?什么编译器标志会影响可执行文件的大小?
动态链接CRT(即在代码生成选项中为CRT选择"多线程DLL";应该是默认值).选择尺寸优化.告诉链接器降低对齐要求(/ ALIGN和/ OPT:NOWIN98,可以在项目配置对话框中的链接器选项下的命令行选项框中输入)(注意:这可能导致您的应用程序无法在某些Windows下运行)版本).
除此之外,您还可以使用像UPX这样的打包程序,但请记住,如果无法成功分析其内容,某些防病毒工具会错误地将打包的可执行文件检测为恶意软件.其他可用于Windows可执行文件的打包程序包括Crinkler和kkrunchy
即使没有打包器,你也可以做一些技巧,比如合并PE部分并在PE头部放置代码.通过这样做,您可以获得一个简单的"Hello world"MessageBox可执行文件,大约700字节左右(未压缩).我不认为Visual C++链接器支持这些操作.有关如何手动完成此操作的示例,请参阅Tiny PE页面(他将其发挥到极致).