-
2008-11-06
修改对齐字节数减小GCC.DDK编译的驱动体积 - [Driver]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://aliwy.blogbus.com/logs/31041225.html
新安装了个Code::Blocks,可以直接采用GCC的DDK写驱动,
但编译出来的驱动比用MSDDK的大太多!!!
如下代码:////////////////////////////////////
#include <ddk/ntddk.h>NTSTATUS
STDCALL
DriverDispatch(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp)
{
return STATUS_SUCCESS;
}VOID
STDCALL
DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
DbgPrint("[Aliwy] DriverUnload() !\n");
return;
}NTSTATUS
STDCALL
DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
DbgPrint("[Aliwy] DriverEntry() !\n");DriverObject->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}
////////////////////////////////////这么一个简单的玩意儿,
GCCDDK编译后竟然达到24K,
如去掉代码中的STDCALL后再用MSDDK编译,最多2K!
开始以为是GCC编译参数有什么奥妙之处还没发现,
Google了好久也没找到答案。
于是在看雪和CSDN分别发帖求助,结果无人问津。
突然想起,用Stud_PE查看一下文件的PE格式~
对比了一下,原来如此——MSDDK默认对齐是128(0x0080),
而GCCDDK默认对齐是4096(0x1000),12倍!!!
汇编MASM32的KmdKit默认才是32(0x0020)。于是,在GCC编译参数设置中,修改对齐字节数,OK了~
Code::Blocks中设置linker参数如此般——
-nostartfiles
-Wl,--nostdlib
-shared
-Wl,--entry,_DriverEntry@8
-Wl,--file-alignment,0x0080
-Wl,--section-alignment,0x0080
-Wl,--image-base,0x00010000Release Build后: Output size is 1.25 KB
随机文章:
用户态应用程序调用Native API的方法 2009-02-03DriverLoader1.1(加载Driver的小玩意儿) 2008-06-13简单说说SSDT 2008-06-12windbg+vmware调试驱动 2008-06-11SSDT Hook的妙用 2007-12-24
收藏到:Del.icio.us
评论