matrixss
驱动牛犊
驱动牛犊
  • 注册日期2004-08-21
  • 最后登录2010-07-26
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望47点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:2052回复:4

SOFTICE调试使用WDK编译的程序无法解析结构

楼主#
更多 发布于:2008-10-30 23:34
          现在在维护一个驱动程序, 使用WDK6001.18001编译的, 使用的编译环境是Windows Server 2003 x86 Checked Build Environment(也试过XP的编译环境), 调试使用的操作系统是XP. 该驱动需要在Vista下运行.
         很奇怪, 生成NMS文件时,没有提示错误.但是我把NMS文件导入之后,只有很少的符号, 看符号名只有几个函数. 我设完断点, 调试时,可以看到驱动的源码, 但是使用WL来查看本地变量时,只能查到很少的几个本地的整形变量的值, 没有任何结构变量.我使用WATCH来查看一个本地的结构类型的变量, 提示说找不到该变量的符号.
       后来,我又使用BoundsChecker来根据一下驱动的内存分配和一些函数的调用情况, 发现加载pdb时,符号显示是match的,但是函数列表窗口一个都看不到.
       问题1: 以前使用IFS 3790的时候从来没有遇到过这个问题, 是不是WDK的pdb文件格式升级了? 有没有办法可以在softice中看到结构变量的成员变量信息? (不要建议我恢复到3790, 有很多编译错误,改动会比较大)
      
        使用WinDBG双机调试, 使用串口线的形式也是了,速度设为11520,觉得挺慢的.   我也试了试windbg+VMWare的形式(参考了借助VMware实现单机使用WinDbg),  虽然可以看到结构里的数据了,但是单步跟踪的速度觉得还是太慢. 文章中提到VMWare可以更改串口的速度,我也试着改了改,效果并不明显,比Softice的单步执行速度慢多了, 是不是我哪里设置错了,或者是我的机器不行,单核的.  
          问题2: 有没有方法提高WinDBG在单步调试时的速度?
stevensn
驱动牛犊
驱动牛犊
  • 注册日期2003-01-14
  • 最后登录2010-12-11
  • 粉丝1
  • 关注0
  • 积分30分
  • 威望58点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-10-31 16:48
Hi Matrixss,

我也曾经遇到过这样的问题,但当时没空深究。但可能的原因有: 你要查看的结构体中含义其他驱动文件定义的符号,这些符号没有加载,导致softice不能解析。你可以尝试同时加载其他的相关驱动,则会加载相关的符号信息。祝你好运,希望能分享一下你的结果。
日出松山坳,晨钟惊飞鸟
matrixss
驱动牛犊
驱动牛犊
  • 注册日期2004-08-21
  • 最后登录2010-07-26
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望47点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-11-01 18:32
谢谢stevensn的回复.  
但是像Irp,UNICODE_STRING这种结构都解析不了,觉得就不应该了.

有时间再试试吧. 要出差几天.回来再研究.
matrixss
驱动牛犊
驱动牛犊
  • 注册日期2004-08-21
  • 最后登录2010-07-26
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望47点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-11-01 18:58
补充一下
我在OSROnline的一个帖子中也看到了类似的问题.摘录如下:

Unfortunately, Gary is right. I have the latest SI available version and can't
use it at Vista. Also, it doesn't seem to work correctly with symbols generated
with the latest WDK compiler even at XP SP2. I haven't examined what causes it,
though. Maybe it can be solved by symbols engine update in the SI directory.

For somebody with one computer I'd recommend different appoach. If kernel
debugger is really necessary, use VMware and connect WinDbg from host to virtual
machine. If he only needs to examine kernel structures, use WinDbg in local
kernel debugging mode (it isn't debugging at all but it allows to examine
current machine state and run KD extensions). Finally, as a long term solution,
I'd recommend to learn how to debug code using traces (discussed here as nauseam
:).

Saying this I really regret SI demise. It was quite useful for reverse
engineering which is unfortunately necessary for Windows development. I need it
only few times per years but in these cases it is really helpful.

Best regards,

Michal Vodicka
UPEK, Inc.
[xxxxx@upek.com, http://www.upek.com]


各位大牛,能不能帮忙分析一下, 看有没有解决的办法? 不行以后真的只能用winDbg了.
stevensn
驱动牛犊
驱动牛犊
  • 注册日期2003-01-14
  • 最后登录2010-12-11
  • 粉丝1
  • 关注0
  • 积分30分
  • 威望58点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-11-04 12:50
哦,听到这消息,真让人伤心哦。不知道syser 能不能胜任。改天试一试。
日出松山坳,晨钟惊飞鸟
游客

返回顶部