exdata
驱动牛犊
驱动牛犊
  • 注册日期2002-11-11
  • 最后登录2007-07-16
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1136回复:1

关于VC IDE Bulid all与DDK Build的比较

楼主#
更多 发布于:2003-03-27 13:03
/*关于VC IDE Bulid all与DDK Build的比较 */

环境:DS2.7 VC6.0
测试工程:一个由DS向导生成的框架代码、Free build

以下是使用VC IDE Bulid all生成的(.sys)PE文件段表信息:
Code Offset = 00000300, Code Size = 00003800
Data Offset = 00003B00, Data Size = 000000C0
Number of Objects = 0008 (dec), Imagebase = 00010000h
   Object01: .text    RVA: 00000300 Offset: 00000300 Size: 00003800 Flags: 68000020
   Object02: .data    RVA: 00003B00 Offset: 00003B00 Size: 000000C0 Flags: C8000040
   Object03: .STL     RVA: 00003BC0 Offset: 00003BC0 Size: 00000020 Flags: C8000040
   Object04: .CRT     RVA: 00003BE0 Offset: 00003BE0 Size: 00000020 Flags: C8000040
   Object05: PAGE     RVA: 00003C00 Offset: 00003C00 Size: 00000860 Flags: 60000020
   Object06: INIT     RVA: 00004460 Offset: 00004460 Size: 00000800 Flags: E2000020
   Object07: .rsrc    RVA: 00004C60 Offset: 00004C60 Size: 00000380 Flags: 42000040
   Object08: .reloc   RVA: 00004FE0 Offset: 00004FE0 Size: 00000620 Flags: 42000040
  
以下是使用DS提供的DDK Build工具生成的(.sys)PE文件段表信息:
Code Offset = 00000320, Code Size = 000031E0
Data Offset = 00003B60, Data Size = 000000C0
Number of Objects = 0009 (dec), Imagebase = 00010000h
   Object01: .text    RVA: 00000320 Offset: 00000320 Size: 000031E0 Flags: 68000020
   Object02: .rdata   RVA: 00003500 Offset: 00003500 Size: 00000660 Flags: 48000040
   Object03: .data    RVA: 00003B60 Offset: 00003B60 Size: 000000C0 Flags: C8000040
   Object04: .STL     RVA: 00003C20 Offset: 00003C20 Size: 00000020 Flags: C8000040
   Object05: .CRT     RVA: 00003C40 Offset: 00003C40 Size: 00000020 Flags: C8000040
   Object06: PAGE     RVA: 00003C60 Offset: 00003C60 Size: 00000860 Flags: 60000020
   Object07: INIT     RVA: 000044C0 Offset: 000044C0 Size: 00000800 Flags: E2000020
   Object08: .rsrc    RVA: 00004CC0 Offset: 00004CC0 Size: 00000380 Flags: 42000040
   Object09: .reloc   RVA: 00005040 Offset: 00005040 Size: 00000620 Flags: 42000040
  
经比较,由VC IDE自带的Build工具生成的驱动程序文件比DDK的少一个段.rdata,前者Number of Objects=8,
后者Number of Objects=9。从.text段的大小和其16进制文件的分析可知前者已经把.rdata段(存放只读数据常量)
容纳到.text段(留意Code Size大小起了变化),其实两者并没有本质上的差别;
在比较测试中还发现由VC IDE自带的Build工具生成的驱动程序文件大小比DDK的大约小6K:
VC IDE Build:
Object08: .reloc   RVA: 00004FE0 Offset: 00004FE0 Size: 00000620 Flags: 42000040
用16进制编辑器打开.sys文件发现00004FE0+00000620后仅有机少量“垃圾”代码,个人认为其处理得比DDK Build合理,也许
是编译或链接器的某些特性引起的;
DS DDK Build:
Object09: .reloc   RVA: 00005040 Offset: 00005040 Size: 00000620 Flags: 42000040
用16进制编辑器打开.sys文件发现00005040+00000620后有大量的“垃圾”代码;大约为6K,文件大的原因在此;
由于这些代码(也许不能用代码来称呼它们)不属于任何段,按常规理解它们不会在驱动启动运行时被系统PE
装载器装载,因此我在这里称它们为垃圾代码。还有的是前者编译速度比后者快若干个档次,有时前者编译\\连接
无法通过,一般删除以前编译生成的相关的文件可解决此问题(clean?),当然Build All前确保DDK目录已经设好。

在此难以一一比较其他有关编译及连接对代码的影响,但应用中发现两者并没有区别(到现时为止)。注意,DS帮助文档
中有以下建议:
“The Microsoft DDK-recommended way to build device drivers is using the BUILD utility shipped with the DDK”      

                                          exdata,03-26
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-03-27 14:36
都是用nmake
游客

返回顶部