- 第一步:
- 第二步:
- 第三步:
- 相关文章
- 评论本文:
WDK中配置binplace
Author: 徐艺波 From: xuyibo.org Updated: 2008-11-19
| | 当更新时自动发送邮件通知。 | |||
| | 有什么建议或评论,可以贴一下。 | |||
| | 你的支持,让我们做的更好。 | |||
DDK2003/WDK中附带的binplace.exe用于将编译的文件放到一个统一的目录下,还有一个很有用的功能是符号剥离:能够将包含局部变量的pdb中的符号剥离出去,这样避免通过pdb公开太多的内部细节,比如微软操作系统pdb。
写这篇文章的时候,WDK中已经有更高级的binplace机制,但我实在不想在看似天书的makefile.new中去寻找蛛丝马迹,干脆直接用老的nt中使用binplace的方式引出本文。欢迎探讨。我的构建系统FlexBuild早期也是使用binplace.exe,后来处于更好的集成,在build内部实现了符号剥离和替换功能。
假设WDK的安装目录为:X:\WinDDK\6000\
修改bin\setenv.bat,在第一行后增加:
REM 这个设置编译后的文件输出目录 set _NT386TREE=d:\release REM 这个设置编译后文件将放到_NT386TREE中那个目录下,如果为retail将为根目录 set BINPLACE_PLACEFILE=d:\placefile.txt
在bin\makefile.new搜索:! ELSEIF "$(TARGETTYPE)" == "DRIVER" || \ 找到后,比如:
! ELSEIF "$(TARGETTYPE)" == "DRIVER" || \
"$(TARGETTYPE)" == "MINIPORT"
$(TARGET): $(OBJECTS) $(BO_LIB) $(MACHINE_TARGETLIBS) $(CRTLIBS)
$(LINKER) @<<
$(LINKER_FLAGS: =
)
$(LINKER_STACKSIZE_DLL)
$(ORDER: =
)
$(SECTION_INFO1)
$(SECTION_INFO2)
$(LINKER_OPTIDATA)
$(DRIVER_SWITCH)
/base:$(DRIVERBASE)
! IF "$(DRIVERTYPE)" == "VXD"
/def:$(DLLDEF)
! ELSE
$(DRIVER_ALIGN_SWITCH)
/subsystem:native,$(SUBSYSTEM_NATVER)
/entry:$(DRIVER_ENTRY)$(ENTRY_SUFFIX)
!endif
/out:$(TARGET)
$(HEADEROBJNAME: =
)
$(**: =
)
<<$(BUILD_NOKEEP)
在<<$(BUILD_NOKEEP)下一行增加:
binplace -a -x -y -s $(_NT386TREE)\stripped -n $(_NT386TREE)\symbols $(TARGET)
如果想针对其它编译类型,比如exe,相应的在"$(TARGETTYPE)" == "XXX”后面增加binplace工具调用。
创建第一步BINPLACE_PLACEFILE指定的文件,其内容格式:
; 编译文件名,不包含目录 移动到_NT386TREE下那个目录下 demo.sys retail Demo1.sys demo1
OK!,想在启动WDK编译一个驱动工程,看看D盘的release目录下有什么:
+ release + stripped 这个为发布的symbols,剥去局部变量的,类似微软操作系统公开的pdb + symbols 这个是包含所有信息的pdb,一般人我不会发给他的 xxx.sys
TrueCrypt Mount/Unmount Command Line
C语言数据导入工具 - FileImport
ZIP文件格式SDK - TinyZip
IE插件查杀工具 - malware.exe
VC++ Minimum Rebuild Dependency File
Softice使用指南
绿色静态链接的notepad2
MD5计算工具 - MD5.exe
命令行新建文件 - new.exe
命令行弹出文件打开窗口工具 - shell.exe
命令行弹出文件/文件夹属性工具 - prop.exe
PE校验和重置工具
哈希值计算工具 - Hash.exe
libnet.dll
命令静态链接的cvs.exe
MSDN精简版、MSDN绿色版、MSDN VC精简版
NT4、2000 内核源码函数文档
.txt转.chm帮助文件的工具
弗莱克斯编辑器 - FlexEdit
C语言代码文档提取工具