资源描述:
《最优化编译设置文库》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、人们都说vc做出的东西可以小点,现在你打开vc编译一个HelloWorld出来!点属性看下,咦!我没走眼吧,就一HelloWorld就160kb真是要人命啊!呵呵!上面的情况是笔者所遭遇的情况.不过后来了解vc可以通过设置参数来自定义编译方式.为什么文件那么大!主要是编译器加入了很多没必要的代码(这里是对我们而言,不过有些代码还是有利于安全的).好了我们就手动改下编译器的参数来看看能到多大!我们主要用到的技巧有:一,使用release版而不用debug版编译使用debug版编译会生成许多垃圾信息.我们先使用默认的设置进行一下编译.可以看到编译后生成的文件有152k之巨.使用rele
2、ase版编译具体方法是:在"build(编译)--->Configuration(配置)"中将"Win32debug"移去,然后再次编译可以发现文件已经小了很多,才24k.但离我们的目标还很远呢.二,设置自己的入口点函数C或C++程序默认的入口函数是main()或WinMain(),但我们现在不用什么Main,WinMain.因为这些都不是直接的入口点,编译器在产生exe文件的时候,将为我们生成真正的入口点.下面我们来定义自己的入口函数,具体是把main或WinMain改成其它的名字(如MyFun),打开"Project(工程)--->settings(设置)"选项,选中"link
3、"选项卡,在"Category(分类)"下拉列表中选"output",在"Entry-Pointsymbol(输入项-点符号)"中输入我们刚才定义的入口函数(MyFun),在源程序中也要做相应修改,然后再编译.现在是16k了:)三,更改编译对齐方式通常VC在编译的时候,采用的对齐方式是0x1000,即4096bytes,我们现在将他改成0x200,即512bytes.在刚才打开的"link"选项卡,在下面的"Projectoptions(工程选项)"中添加:/align:512(还可以将512设置的更小如16,32.....).注意两个参数之间有个空格.3k了^_^用32试试1.8
4、4k好~~~用161.79k天哪!再把程序的数据段和代码段放在一起,添加:/merge.data=.text/merge:.rdata=.text1.76kgoon!另外,如果要是用到MFC函数的程序,可在"Project(工程)--->settings(设置)"里面的"通用(General)"选项卡中在"MicrosoftFoundationClasses"中选择使用一个MFC的dll(UseMFCinaShareDll)也会使文件大小缩小很多.现在我们的超小后门编译好了,试下能用否.ok没问题哦大家注意到程序运行时会产生一个cmd窗口,要让他没有就好了.这也好办.回到VC++中
5、,在"Project(工程)--->settings(设置)"选项,选中"link"选项卡,在下面的"Projectoptions(工程选项)"有/subsystem:console选项,表示程序是控制台程序,双击运行是会有一个cmd窗口,把console改为windows就没有窗口了.:),运行一下没有窗口哦但有进程连接一下试试ok没问题这样我们的超小1.76ktelnet小后门就成功了不被查杀哦^_^//编译器cl.exe(VisualC++6.0)//没有做任何优化情况下,编译大小为:16K//编译优化后:1K(用16进制编辑器把尾部的0x00去掉:712bytes)#inc
6、lude#pragmacomment(lib,"kernel32.lib")//作用:指定节对齐为512字节#pragmacomment(linker,"/align:512")//作用:合并节//将.data节和.rdata节合并到.text节(代码节)#pragmacomment(linker,"/merge:.data=.text")#pragmacomment(linker,"/merge:.rdata=.text")//作用:指定子系统为windows(和优化无关)//vc编译器默认是console,会有个黑糊糊的CMD窗口,不好看.用windows
7、就好了#pragmacomment(linker,"/subsystem:windows")//作用:指定入口函数//子系统为windows的默认入口点WinMain和console的默认入口点main,都会引入#pragmacomment(linker,"/ENTRY:main")//intWinMain(HINSTANCEcurrent,HINSTANCEprev,LPSTRcmdline,int//showcmd)//作用:去掉函数的栈帧代码,纯属吹毛求疵:-)