高分讨论:如何让VC编译的EXE/DLL体积最小

flywhc 2001-06-06 04:27:00
前两天我贴,因为CSDN的bug竟然变别人的问题了

一个纯sdk的程序,编译以后竟然也有20k,而VB的一个最简单程序编译后大小也是20K
这对于编写bo一类木马是不成的。编译以后的文件显然有大量的重复的"0"

如何优化编译、连接参数等使程序体积最小呢?
条件:不用第三方压缩软件,不使用MFC,可能使用ATL、STL,使用minize size level 4的编译参数。
还有什么可能让其体积减小?

我见过10K以内的win32 exe,我不信是用汇编做的
...全文
772 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kevin_qing 2001-06-08
  • 打赏
  • 举报
回复
to flywhc(午夜蓝调) :
方法就是不使用所有的系统库。比如stdio.h ...
如果是使用C++写的话,那么还要自己写new/delete

连接的时候只需要连接kernel32.lib,另外把no default lib选上。
修改入口
project settings->link->output->entry point填你的主函数名字,比如main

crazybit 2001-06-08
  • 打赏
  • 举报
回复
那你就自己做一个PE-compressor吧,UPX的原码是公开的。
flywhc 2001-06-08
  • 打赏
  • 举报
回复
to Kevin_qing: 请给出具体做法(参数设置以及哪些函数需要自己来做或者动态连接到DLL?)

to iZap: 下载地址?

btw: 每种方法给100分 :)
iZap 2001-06-07
  • 打赏
  • 举报
回复
<<windows高级编程指南>>里的例子都多是几k,看看...
Kevin_qing 2001-06-07
  • 打赏
  • 举报
回复
忘了说,还有就是可以把自己压缩了·····
就是加一个壳
Kevin_qing 2001-06-07
  • 打赏
  • 举报
回复
因为vc的Crt0.lib连接进去后你的.exe就至少有20K了,所以才不能用crt0的起动代码。
所以也不能用VC的run-time lib。
自己写一些lib可以做较少的错误检查,所以实际体积会更小些。

实现第2条是这样的
project settings->link->output->entry point填你的主函数名字,比如main
flywhc 2001-06-07
  • 打赏
  • 举报
回复
我认为法1会使体积增大,毕竟VC的run-time lib是DLL,系统自带了才省地方
2. 怎么做?
3. 不太管用。我发现使用lib和不使用lib体积上变化不大。

我觉得也许是VC的编译效率太低了?为什么要那么多"00 00...",还要把一些没用的符号也编译进去。
panda_w 2001-06-06
  • 打赏
  • 举报
回复
还有什么方法!
关注一下
Kevin_qing 2001-06-06
  • 打赏
  • 举报
回复
1.不要使用所有的C/C++run-time lib,自己谢函数或者使用winapi来替代它们。
2.将.exe/dll的入口地址改为你的程序的主函数入口地址。
3.使用LoadLibrary函数来load需要的dll,用GetProcAddress来得到需要使用的API

这样可以减少.exe的体积

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧