昨天用vs编译的驱动发现比同样代码用WDK自带编译的几乎大出一倍体积。
考虑以前对ring3程序体积研究,首先想到的是pe文件对齐问题。于是在链接命令处加上 /align:16.编译后果然文件一下就从4K变成了1K多一点,不过先别高兴得太早,丢到虚拟机一跑,BSOD了,fuck!于是加为32字节,这次加载时没蓝屏,但是卸载的时候又BSOD了,再次fuck,我调成64字节之后终于好了,再看体积比WDK编译的仍旧要小几百字节呢。
附网上找到的资料:
这么一个简单的玩意儿,
GCCDDK编译后竟然达到24K, 如去掉代码中的STDCALL后再用MSDDK编译,最多2K! 开始以为是GCC编译参数有什么奥妙之处还没发现, Google了好久也没找到答案。 于是在看雪和CSDN分别发帖求助,结果无人问津。 突然想起,用Stud_PE查看一下文件的PE格式~ 对比了一下,原来如此—— MSDDK默认对齐是128(0x0080), 而GCCDDK默认对齐是4096(0x1000),12倍!!! 汇编MASM32的KmdKit默认才是32(0x0020)。 于是,在GCC编译参数设置中,修改对齐字节数,OK了~
这位仁兄的说法和我猜想的不谋而合......
|