512K的程序好像还是不能正常运行在其它的平台上
作为被控端,体积小是很有必要的,一是易捆绑,另一个是下载时不易被发觉,汗。。。
编程语言选择C++,和win32ASM;
IDE为VS.2005,及radASM。
下面以各种语言生成一个只含一个窗体的EXE程序,无其它任何功能,一般是新建后直接生成的
用VC.NET直接生成一个窗体EXE文件大小为100K,两个图标就占了46K。在OD进行跟踪时发现了大量的垃圾信息,包括安装目录及调试目录,如:
堆栈 SS:[0012FF54]=000209AC, (UNICODE ":\Documents and Settings\foxhan\My Documents\Visual Studio 2005\Projects\test_c\debug\test_c.exe"")
并包含了MSVCR80D.dll的大部分关联API函数
用MASM生成一个20K,图标只占了1K,ASM的好处是:除了用到的都不会包括在文件里。但它还是有资源部分(.rsrc)的区块(secion)
再用radasm生成,不带资源段的,只有不到5K,反汇编后非常的直观。
VB生成一个窗体也只有16K,看来是程序为了对齐空间而规定的最小大小吧,所有生成的文件里都有很多的0区的,只有VC的都是CC,VB大分函数的实现是调用了MSVBVM60.DLL中的API。
VC6生成的文件也有116K之大,图标只有不到期2K汗,好大的工程.
怎么会有如此的差别呢。
鸽子900K,DELPHI编写,PS20K,其实到达到控制目的,肉鸡中招后还要从控制端那里下载一个80K的控制端组件,加起来也得100多K,C++编写
如何才能用最少的代码编写最多的功能呢,窗体不用资源而用API直接生成,彻底去除.rsrc段,然后就是代码空间对齐的问题了。
看过了汇编后再来看C++代码感觉舒服很多,以牺牲空间来提高效率,用来作控制端还是可取的。
发表于 @ 2006年02月28日 19:58:00|评论(loading...)|编辑