WDK中配置binplace

 

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
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值