GCC编译驱动,如何减小其大小?

aliwy 2008-11-05 10:41:57
新安装了个Code::Blocks,可以直接采用GCC的DDK写驱动,
但编译出来的驱动比用MSDDK的大太多!!!
如下代码,这么一个简单的玩意儿,竟然达到24K,MSDDK编译的最多2K。
GCC要怎么设置吗?

#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("DriverUnload() !\n");
return;
}

NTSTATUS
STDCALL
DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
DbgPrint("DriverEntry() !\n");

DriverObject->DriverUnload = DriverUnload;

return STATUS_SUCCESS;
}

...全文
423 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-11-06
  • 打赏
  • 举报
回复


在windows下:

#pragma pack(yoursize)

或者:

#pragma pack(push,yoursize)
#pragma pack(pop)
aliwy 2008-11-06
  • 打赏
  • 举报
回复
-nostartfiles
-Wl,--nostdlib
-shared
-Wl,--entry,_DriverEntry@8
-Wl,--file-alignment,0x0080
-Wl,--section-alignment,0x0080
-Wl,--image-base,0x00010000

红色的两处原先默认是 0x1000
aliwy 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hqin6 的回复:]
C/C++ code

在windows下:

#pragma pack(yoursize)

或者:

#pragma pack(push,yoursize)
#pragma pack(pop)
[/Quote]
君有试过吗???
norsd 2008-11-05
  • 打赏
  • 举报
回复
楼上,你怎么改的,我也需要这个参数.
快告诉我 :)
aliwy 2008-11-05
  • 打赏
  • 举报
回复
上面那段代码中有STDCALL,那就是用gcc编译的啊,默认编译出来24K,呵呵~

刚才有看了一下,貌似是因为文件对齐和节对齐,
MSDDK默认对齐是128(0x0080),
而GCCDDK默认对齐是4096(0x1000),
KmdKit默认是32(0x0020)。

在参数设置中修改对齐字节数,就可以了。
norsd 2008-11-05
  • 打赏
  • 举报
回复
你用vc的编译器还是gcc?

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧