WDK正常编译后,在windbg里,check版本的符号很正确,release版本的符号经常对不上
Windows内核调试
WDK正常编译后,在windbg里,check版本的符号很正确,release版本的符号经常对不上
clark
2011-01-18, 15:32 下午
我的驱动程序编译后,都是用build -nmake /a 全部编译后发行.
check版本时,在windbg里调问题时很清晰,所有的符号都很准确.
但是release版本时,在客户那边出了问题,给回dmp文件时,用windbg分析,经常符号对的非常混乱,有的变量无法查看其值,有的对应错了.头疼死了.
请问该怎么处理?
我的makefile文件和source文件都非常简单:
makefile文件里:
!IF 0
Copyright (C) Microsoft Corporation, 1999 - 2002
Module Name:
makefile.
Notes:
DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source
file to this component. This file merely indirects to the real make file
that is shared by all the components of Windows NT (DDK)
!ENDIF
!INCLUDE $(NTMAKEENV)\makefile.def
source文件里:
TARGETNAME=FXD
TARGETTYPE=DRIVER
DRIVERTYPE=FS
TARGETLIBS= $(TARGETLIBS) \
$(IFSKIT_LIB_PATH)\fltMgr.lib
SOURCES= .....\
FXD.rc
Re: WDK正常编译后,在windbg里,check版本的符号很正确,release版本的符号经常对不上
王宇
2011-01-18, 18:45 下午
这很正常啊。如果在 release 版里还能 ?? 出变量,那就信息泄露大了。WDK 的优化还算好,不然连函数都给优化内联了才叫抓狂。
多数公司会编译完加签名,会导致偏移再次错位,加壳 / VM 的则更悲剧。我远程用户的时候,往往得 Local Debug 等一点点分析我的变量,这时,留一些“不经意”的定位“入口”(不违反信息保密 / 被攻击者利用 Patch 的前提下)会帮上大忙。
QQ 远程用户时,无法调试驱动。我给逼的只得写一堆栈回朔封装,内存打印封装,往驱动里整,给用户替换,定位问题。LZ 看看 dump 啥的,已经很幸福了呢。
Re: WDK正常编译后,在windbg里,check版本的符号很正确,release版本的符号经常对不上
clark
2011-01-19, 08:22 上午
额,ls你说的那些我也搞了,我驱动中支持一整套的我自己的各种调试机制,我通过往一个特定的DIOC中输入数据,可以指引我的驱动打印各种数据,影响它的执行流程等等.
我之前也一直认为是release版优化的问题,所以没管这个问题.看dmp文件也经常要dds的搞下去.可搞多了,就觉得这样太痛苦了.
我试过编译的时候把优化关的差不多了,还是有这个问题.
这和保密什么的没关系啦.用户又没有驱动的符号文件,怎么可能能分析到各个符号的数据等等.
Re: WDK正常编译后,在windbg里,check版本的符号很正确,release版本的符号经常对不上
王宇
2011-01-19, 10:24 上午
呵呵,我还是觉得这个问题没什么。写驱动的人应该要很清楚自己发布驱动的二进制细节特征,从 Dump 的文件版本信息必须能唯一定位到自己的某个 Tag。再 IDA 兑一下那个 Tag 的 Free Build 版,也就几分钟的事情嘛。
另外就是 ls 同学的驱动应该不是对公众发布的 ( FXD.SYS )。某些众矢之的的公司驱动发出来,几天之内就可以被木马作者们逆成源码。到时被点杀会很惨的。