VC写的程序体积是挺大的,网上也有很多优化的文章,都是针对VC6.0来说的。我把我的总结下。
 
#include <windows.h>
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib")
 
写Win32程序的话,windows.h 是必须的,使用动态连接必要的系统库,可以把link下的链接库全部删除,需要就练级。
 
 
 
 
 
#pragma comment(lib,"msvcrt.lib")
 
这句是用来动态连接VC库的,使用VC6.0的可以加上,但是使用VS2008以后的就不要加了。我是用VS2010的时候,编译后需要 msvcr100.dll 文件。VS2010一旦静态链接了msvcrt.lib,体积立马上到28,如果复杂点的程序可能会更大。如个仅仅是一个HelloWorld,一个MessageBox的话,因为不需要用到msvcrt.lib,所以体积不会增加的,这个时候加不加这句话都无所谓。
 
#pragma comment(linker, "/SUBSYSTEM:windows")
 
这句是用来说明是win32程序,不是控制台的程序,控制台的程序会有个黑窗口。可以再程序里写,也可以再配置里写。
 
#pragma comment(linker, "/ENTRY:main")
 
这个用来更改入口函数,对vs2010编译的程序,效果很明显。一旦指定了入口函数,体积真的是立马下来了。
 
#pragma comment (linker, "/ALIGN:512")
 
对齐方式,这个我用VS2010测试的时候,修改这个,编译后的程序都提示不是有效的Win32程序。VC6.0上没问题。VS2010编译的同志就不要改了。VC6.0的可以修改测试,数值还可以减少。
 
#pragma comment(linker, "/merge:.data=.text")
#pragma comment(linker, "/merge:.rdata=.text")
 
合并区段。我认为是没什么必要,编译的时候会有警告。VS2010编译后可能会出现程序不能正常运行,VC6.0的正常,不推荐。
 
#pragma comment(linker, "/OPT:NOWIN98")
 
不对Windows 98系统做优化。VS2010已经取消了这个选项,如果加上这句话,编译的时候会出现警告。VC6.0加着句话,也能减少不少的体积。VC6.0上,推荐使用。
 
OPtimization        Minimize Size(/O1)
 
C/C++选项里的,最小体积编译,效果不明显。
 
 
 
最后看下效果:

Code Snippet
 
#include <windows.h>
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib")
#pragma comment(linker, "/SUBSYSTEM:windows")
#pragma comment(linker, "/ENTRY:main")
 
int main()
{
    MessageBox(NULL, TEXT("hello!"), TEXT("hi"), 0) ;
    return 0 ;
}
 
 
 
 
 
 
 
这段代码使用VS2010编译后体积也只有3K。其他一些优化,对体积的影响不明显,基本可以忽略不计。不过大家有兴趣的话,可以自己测试。如果找到其他优化的方法也记得和我说下。

vc6编译出小体积pe文件相关推荐

  1. 备忘: VC++ 自动适用编译两种模式库文件 (DLL, LIB)

    为什么80%的码农都做不了架构师?>>>    一个好的程序设计规划总会有属于自己的基础代码库.重用这些代码库,DLL或LIB方式最好的选择之一.在写新的项目或程序是,我们不可能每次 ...

  2. 理解PE文件相对虚拟地址(RVA)到文件偏移的转换

    关于PE文件格式的详细描述在网络上可以找到一大堆,最近有空,我也来研究一把.读了很多参考资料,应该说都讲得非常清晰,尤其是看雪学院的iamgufeng翻译的那篇文章,读来受益非浅. 根据我这个菜鸟的阅 ...

  3. 让vc编译出的程序减小体积

    让vc编译出的程序减小体积 转自邪恶八进制 ----------------------------- 人们都说vc做出的东西可以小点,现在你打开vc编译一个Hello World出来!点属性看下,咦 ...

  4. 将.C文件编译成最小的PE可执行文件

    开头,如果想知道编译最小的ELF文件,参考http://web.archive.org/web/20111205062215/http://www.muppetlabs.com/~breadbox/s ...

  5. 小甲鱼 OllyDbg 教程系列 (二) :从一个简单的实例来了解PE文件

    小甲鱼视频讲解: https://www.bilibili.com/video/av6889190?p=6 https://www.bilibili.com/video/av6889190?p=7 从 ...

  6. [re入门]PE文件小知识

    从PE入手的信息收集,让恶意样本无处可逃 一. PE文件格式的基础知识 1.1 认识PE文件 1.2 整体结构 1.3 基地址 1.4 相对虚拟地址 1.5 文件偏移地址 1.6 结构 1.6.1 D ...

  7. java通过对.class文件字节码加密,不被轻易反编译出源代码,分析及其实现。

    java通过对字节码加密,不被轻易反编译出源代码. 分析: JVM运行java文件是通过加载.class文件实现程序运行的,而且这个过程被我们称为类加载机制. 执行加载这个动作的是类加载器(java. ...

  8. X64dbg脚本实现自动DUMP运行中解密出的PE文件

    X64dbg脚本实现自动DUMP运行中解密出的PE文件 // define a variable to hold allocated mem address var mem_addr // defin ...

  9. 给出以下程序,制作makefile文件,编译出可执行文件

    给出以下程序,制作makefile文件,编译出可执行文件 方法一(通过静态库方式): 方法二(直接): main.c /* main.c */ #include "mylinux1.h&qu ...

最新文章

  1. MySQL 数据库常用命令—insert delete update select
  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:让按钮看起来像个链接 (仍然保留按钮行为)...
  3. 分析拼多多的崛起【产品思维】
  4. 你不得不了解的10款服务器监控工具
  5. 《深入理解计算机系统》第七章 链接
  6. 最小树形图(bzoj 4349: 最小树形图 2260: 商店购物)
  7. matlab哈明窗带阻,MATLAB数字滤波器程序 Hamming窗带通滤波器
  8. jpg、jpeg、png... 的区别
  9. MFC之映美精双目相机保存图片
  10. 华为铁三角作战的道法术,华为铁三角第一人,LTC专家许浩明老师讲授
  11. salt 安装kubernetes集群3节点
  12. LATEX保护视力背景色设置
  13. 二级路由dhcp关闭连不上wifi_路由器的使用小技巧!
  14. Android进程保活——双进程守护
  15. 【bzoj4084】[Sdoi2015]bigyration hash
  16. HACK RF学习之旅记录1——填坑历程
  17. 论文邮箱不是导师的_考研初试成绩出来后,可以给导师群发邮件吗?想发邮件要做到三点...
  18. zoj1025 dp(呃。。)
  19. 使用io流一行一行读取txt文件
  20. CTF日记之web题目(入门题目)

热门文章

  1. linux 内核 xfs ail,linux 3.10内核 xfs的一次io异常导致的hung crash
  2. cad怎么在线看图?在线渠道一览
  3. 中国大模型的落地DNA,写在这个双螺旋结构里
  4. Android assets
  5. 去除txt文件中的空行
  6. http://blog.csdn.net/a9529lty/article/details/6454145
  7. QQ邮箱“550 Mailbox unavailable”错误的问题
  8. Bluetooth--- android -- 蓝牙 bluetooth
  9. 深入分析MCU堆栈的作用,以及该如何设置堆栈大小
  10. Mysql添加用户、修改权限,修改登录权限ip