WDK中配置binplace

    Author: 徐艺波  From: xuyibo.org  Updated: 2020-11-19

      邮件通知  当更新时自动发送邮件通知。
      评论本文  有什么建议或评论,可以贴一下。
      捐助  你的支持,让我们做的更好。
     

    DDK2003/WDK中附带的binplace.exe用于将编译的文件放到一个统一的目录下,还有一个很有用的功能是符号剥离:能够将包含局部变量的pdb中的符号剥离出去,这样避免通过pdb公开太多的内部细节,比如微软操作系统pdb。

    写这篇文章的时候,WDK中已经有更高级的binplace机制,但我实在不想在看似天书的makefile.new中去寻找蛛丝马迹,干脆直接用老的nt中使用binplace的方式引出本文。欢迎探讨。我的构建系统FlexBuild早期也是使用binplace.exe,后来处于更好的集成,在build内部实现了符号剥离和替换功能。

    假设WDK的安装目录为:X:WinDDK6000

  1. 第一步:
  2. 修改binsetenv.bat,在第一行后增加:

    REM 这个设置编译后的文件输出目录
    set _NT386TREE=d:release
    REM 这个设置编译后文件将放到_NT386TREE中那个目录下,如果为retail将为根目录
    set BINPLACE_PLACEFILE=d:placefile.txt
    
  3. 第二步:
  4. 在binmakefile.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工具调用。

  5. 第三步:
  6. 创建第一步BINPLACE_PLACEFILE指定的文件,其内容格式:

    ; 编译文件名,不包含目录                              移动到_NT386TREE下那个目录下
    demo.sys                                             retail
    Demo1.sys                                            demo1
    

    OK!,想在启动WDK编译一个驱动工程,看看D盘的release目录下有什么:

    + release
      + stripped   这个为发布的symbols,剥去局部变量的,类似微软操作系统公开的pdb
      + symbols    这个是包含所有信息的pdb,一般人我不会发给他的
      xxx.sys
    

  7. 相关文章
  8. Softice使用指南
    PE校验和重置工具
    命令行弹出文件/文件夹属性工具 – prop.exe
    命令行弹出文件打开窗口工具 – shell.exe
    绿色静态链接的notepad2
    命令行新建文件 – new.exe
    文件MD5,SHA1,CRC32计算工具 – hash.exe
    文件MD5计算工具 – md5.exe
    libnet.dll
    命令静态链接的cvs.exe
    MSDN精简版、MSDN绿色版、MSDN VC精简版
    NT4、2000 内核源码函数文档
    .txt转.chm帮助文件的工具
    C语言代码文档提取工具
    国产文本/十六进制编辑器 FlexEdit

  9. 评论本文:
  10. EMail: