阅读:1136回复:1
关于VC IDE Bulid all与DDK Build的比较
/*关于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 |
|
沙发#
发布于:2003-03-27 14:36
都是用nmake
|
|