Chinaunix首页 | 论坛 | 博客
  • 博客访问: 363303
  • 博文数量: 112
  • 博客积分: 5245
  • 博客等级: 大校
  • 技术积分: 1120
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-07 09:20
个人简介

静下来,定好方向,好好干。

文章分类
文章存档

2017年(1)

2012年(1)

2011年(5)

2010年(6)

2009年(16)

2008年(59)

2007年(24)

我的朋友

分类: WINDOWS

2008-04-17 11:48:35

SOFTICE 中进行源代码调试

我们通常使用SoftIce都是使用汇编调试,以前在很多有关SoftIce的文章中看到了基于源码调试的方法.但是自己没有亲自去整过.
遗憾的是按照网上任何一个例子,都不能配置成功,FILE命令显示源码为空.
后来总结了一下,发现问题出在源码文件的位置.原来,写教程的人,都留了一手.

scz在他的一篇文章中这样写他编译一个loopback.sys)
复制内容到剪贴板
代码:
一定要用"Win XP Checked Build Environment"编译。编译前先确认两个环境变量的
设置,第二个可以设置成"NTDEBUGTYPE=windbg",也可以保持不变。

> set NTDEBUG
NTDEBUG=ntsd
NTDEBUGTYPE=both

我的DDK开发环境在VMware Host上,调试环境则在VMware Guest上。将loopback.c、
loopback.pdb、loopback.sys复制到VMware Guest上同一目录下,比如onlytemp下。
用installdriver.exe安装loopback.sys。VMware Guest上PATH环境变量已经包含
"C:\Program Files\Compuware\DriverStudio\SoftICE",其下含有nmsym.exe。

--------------------------------------------------------------------------
onlytemp> installdriver.exe -s Loopback -d Loopback -c c:\onlytemp\loopback.sys

onlytemp> nmsym.exe /translate:always,source,package /output:loopback.nms loopback.sys

Compuware NM32 Symbol Translator/Loader version 1.24
(C) Compuware  Technologies, 1996-2001

MODULE=loopback.sys
OUTPUT=loopback.nms
PROMPT=OFF
Translation of C:\onlytemp\loopback.sys successfully completed

onlytemp> nmsym.exe /symload:loopback.nms

Compuware NM32 Symbol Translator/Loader version 1.24
(C) Compuware  Technologies, 1996-2001

SYMLOAD=loopback.nms
PROMPT=OFF
Symbols for loopback.nms successfully loaded
我在主机上e:\Source\hook2中建立了工程,编写了makefile和source文件
进入DDK Checked Build环境
e:\Source\hook2\build -cZ -x86 编译

然后我将.cpp,.obj,.pdb,.sys以及.h文件全部拷入我虚拟机的c:\c文件夹

更改VMware Guest上的PATH环境变量,加入C:\Program Files\Compuware\DriverStudio\SoftICE

c:\c>net start NTICE 启动SoftIce

然后翻译符号表,注意translate后面的参数,表示将源代码信息加载到符号表
c:\c>nmsym.exe /translate:always,source,package /output:hook2.nms hooks.sys
加载符号表
c:\c>nmsym.exe /symload:hook2.nms

成功将nms文件加载到SoftIce符号表,可以在SoftIce里面用Table命令看到hook2.

设下驱动入口断点:

:BPX hook2!DriverEntry

然后
c:\c>svcs -install hook2 hook2.sys
c:\c>svcs -start hook2

(svcs是我用来加载驱动为服务的一个小工具...)

c:\c>svcs -start hook2执行后SoftIce马上弹出来,停在DriverEntry处.
但是,我用File hook2.cpp想显示源文件的时候,竟然没有作用(-_-!)
File *显示并没有源代码文件加载进来...

问题的发现和解决
执行nmsym.exe /translate:always,source,package /output:hook2.nms hooks.sys的时候,返回

MODULE=hook2.sys
OUTPUT=hook2.nms
PROMPT=OFF
Translation of C:\c\hook2.sys successfully completed

注意到PROMPT这个选项
将命令改为:
nmsym.exe /translate:always,source,package /output:hook2.nms hooks.sys /promptn
执行后终于现了原型,提示源文件找不到.
怪不得加载了这样的nms不会显示源文件.

通过UltraEdit中的UltraCompare分析生成的目标文件obj和pdb,发现其中含有e:\Source\hook2信息,于是判断可能SoftIce生成符号表的时候会判断这里的源码文件路径,所以才会弹出源文件找不到的提示.
我编译是在主机的e:\Source\hook2上,而在VM虚拟机上并不存在这个路径,所以在虚拟机上调试出现问题.

我在主机C:\中新建一个文件夹c,使得路径和虚拟机一样,成为c:\c

我将主机中的e:\Source\hook2内容全部copy到主机的c:\c中

打开DDK Checked Build环境,在c:\c下重新编译

将新生成的所有文件copy到虚拟机的c:\c中,重新建立符号表:
nmsym.exe /translate:always,source,package /output:hook2.nms hooks.sys /promptn
这次没有任何错误提示.

设hook2!DriverEntry断点

c:\c>svcs -start hook2

SoftIce 弹出

File命令显示有4个源码文件加载进来

src切换到源码显示,光标停留在DriverEntry的左花括号所在行.

至此,可以进行源代码调试了.
阅读(850) | 评论(0) | 转发(0) |
0

上一篇:人生133个规则

下一篇:李洹法文演讲

给主人留下些什么吧!~~