使用SoftICE调试程序入门

SoftICE是Numega公司出品的强大的程序调试工具,它可以运行dos,win3.1,win9x,winme,winnt,win2k等多种操作系统,是跟踪调试程序的有力的工具。这篇文章是我在自己使用SoftICE的过程中总结的关于SoftICE软件的安装、使用的方法与心得。 
  注意:以下讲述的是SoftICE version 4.05 for win2k,其他版本和它大同小异,如果你的SoftICE与我的不一样,请查阅SoftICE的在线帮助。 
1. SoftICE安装及设置 
  SoftICE的安装并没有什么特殊的地方,与一般的软件一样,运行setup进行安装。安装过程中会出现几个配置SoftICE的对话框,它们都可以在以后通过开始菜单中相应的程序重新配置,所以后面只说明通过程序配置的步骤,其实与安装时的配置对话框是一样的。 SoftICE安装好后将在"开始"菜单中建立一个"Softice"菜单(图一),中间有许多的程序,下面简要介绍他们的功能。 

『一』Display Adapter Setup 显卡配置(图二) 
   SoftICE现在支持许多的显卡,如果你好运的话,安装程序将会自动选择合适的显卡让你测试,选择TEST是必要的,以了解你现在选择的显卡驱程是否与你的显卡匹配,如果冒失地选择一个与你的显卡并不匹配的驱动程序,当你进入SoftICE调试状态时将会花屏。我推荐把Universal Vidoe Driver这一项选上,就象下图所示,这样SOFTICE 就会在一个窗口里弹出来,而不会切换到全屏(那样容易花屏,而且当你调试时显示器不断地在字符和图形两种模式下来回转换,对显示器不好。) 

『二』Mouse Setup 鼠标配置(图三) 
   鼠标配置也相当重要,SoftICE支持在它的调试窗口中使用鼠标,这对已经习惯于鼠标的我们来说当然相当方便。如图所示,有串行鼠标接口与PS/2鼠标接口等选择。 

『三』Startup Mode Setup SoftICE启动模式设置(图四) 
    SoftICE启动模式设置是选择SoftICE在什么时候启动,其中有四个选项: 

Boot: 在Windows启动之前加载SoftICE,这个选项非常强大,甚至可以让你跟踪Windows启动的代码,主要是用于跟踪调试等级与Windows核心一样的驱动程序,当然也可以调试所有的应用级程序。 
   System: 与Windows一起启动,适用于跟踪调试Windows应用程序。 
   Automatic: 自动启动,与Windows一起启动,适用于跟踪调试Windows应用程序。 
   Manual: 手工启动,运行开始->SoftICE->Start SoftICE才启动SoftICE,当然它不能调试内核驱动程序。 
   注意:一旦加载了SoftICE,只有重新启动计算机才可以"卸载"SoftICE。我建议如果你不是要调试内核驱动程序的话,最好选择Manual,如果你选择每次启动Widnows时都加载SoftICE,在你不调试时,就很浪费资源还有可能造成系统不稳定。 
   『四』Symbol Loader 符号加载器 
在你调试程序前必须要运行符号加载器。它的功能是通知SoftICE加载将要调试的程序,然后转换程序的调试符号表,使SoftICE能够在源码级上进行调试(这当然要求你编译的程序是调试编译即Debug Build的)。它的界面如(图五)所示。 

它主要有以下的操作命令: 
Open: 打开需要调试的程序,一般说有以下几种:用户级程序有*.exe , *.dll, *.ocx, *.vbx; 内核级程序有*.sys (win 2K/nt) , *.vxd, *.386, *.drv (win Me/9x)。 
Load: 将所打开的程序加载。 
Translate: 将源码转换为SoftICE识别的NMS符号文件。如果你在编译或汇编时指定了Debug Build(即调试编译),那么可执行程序中将包括函数输入输出符号表和源码路径等调试需要的信息,所以你不需要特意指定你的源码路径,SoftICE能够找到它。 
Load Exports: 加载32位的输出动态文件,它包括驱动程序、win32应用程序、dll程序等。Load Exports在调试没有调试信息的dll时格外有用。 
SoftICE Initialization Setting: 初始化SoftICE设置。你可以在这里修改一些SoftICE预设的设置,象快捷键等。 
你可以使用快捷键在SoftICE中代替一些常用命令,以下为预设的快捷键: 
  F1 --- 显示帮助 
  F2 --- 打开/关闭寄存器窗口 
  F3 --- 切换当前源码的模式 
  F4 --- 回到Windows 
  F5 --- 执行 
  F6 --- 在命令窗口和源码窗口切换 
  F7 --- 执行到光标所在行 
  F8 --- 单步执行,如果调用过程,则跟踪进入进程 
  F9 --- 在光标所在行设中断点 
  F10 --- 单步执行,如果调用过程,则跳过过程 
  F11 --- 执行到SS:EIP 
  F12 --- 从当前的过程中返回 
   Shift-F3 --- 改变数据窗口内的数据的格式 
   Alt-F1 --- 打开或关闭寄存器窗口 
   Alt-F2 --- 打开或关闭数据窗口 
   Alt-F3 --- 打开或关闭代码窗口 
   Alt-F4 --- 打开或关闭监视窗口 
   Alt-F5 --- 清除命令窗口 
2. 使用softice调试程序 

下面是调试程序的一般步骤: 
   首先我们要确认是否根据需要调试的程序(应用程序还是内核程序)而设置好了SoftICE的正确的启动模式。如果不是则需要运行SoftICE->StartUp Mode Setup重新设置。具体的方法见前。 
   使用Ctrl+D组合键调出SoftICE窗口,确认已经加载了SoftICE后,我们可以进行需要调试程序的加载。 
a 打开Soft-ICE->Symbol Loader工具。 
b 用"File" 菜单中的"Open Module ..."菜单项打开需要调试的可执行文件。 
c 用"Module"菜单中的"Load"菜单项装载调试符号文件。如果目的文件并没有调试信息的话,Symbol Loader会警告你,只能够进行汇编级调试,而不可以进行源码级调试。 
d 用"Module"菜单中的"Translate"菜单项将需要调试的文件转换成Soft-ICE的 NMS调试符号文件。 
e 现在调试文件的加载工作已经完成,可以按Ctrl+D组合键激活SoftICE,加入断点,进行调试了。 
f 窗口一开始是有点小,所以我们可以先调整窗口,使用 
lines X 命令可以将调试窗口设置为X行 
width X 命令可以将调试窗口设置为X列 
g 使用file命令显示目前符号表中的源码文件,进而使用file xxx.c在源码窗口中打开xxx.c源码文件。 
h 使用bpx xxx来设置断点。xxx为xxx.c文件中存在的函数。 
i F5退出SoftICE窗口,执行需要调试的程序,程序执行到我们设置的断点处将自动进入SoftICE窗口,进行跟踪操作,这时我们就可以使用SoftICE中的各种命令来跟踪程序的流程。 
   在这里我将对SoftICE一些常用命令进行说明。由于SoftICE中有在线的参数提示,所以我在这里就没有提及各命令的参数。 
   (一)窗口控制命令 
如果你能够使用鼠标的话,很方便就可以改变窗口的大小。 
LINES 改变SoftICE窗口的显示行数 
WIDTH 改变SoftICE窗口的显示列数 
WL 打开或关闭局部变量窗口;设置局部变量窗口的大小 
WR 打开或关闭寄存器窗口 
WW 打开或关闭监视窗口;或改变监视窗口的大小 
WD 打开或关闭数据窗口;或改变数据窗口大小 
WC 打开或关闭代码窗口;或改变代码窗口大小 
CLS 清除命令窗口中的字符 
DATA 显示另一个数据窗口 
   (二)数据/代码监视命令 
以下的命令是用来监视目前程序中的数据或变量的。 
formAT 改变数据窗口的显示格式 
DEX 在数据窗口中显示(或赋予)某个表达式 
WATCH 加入一个变量到监视窗口中 
LOCALS 从当前栈中列出局部变量 
STACK 显示某个调用栈 
   (三)Windows系统信息命令 
在调试程序的时候当然不能脱离调试的环境,所以就有了以下极其有用的命令用来显示目前Windows系统的内部状态。这可是我所见过的最为详细的Windows系统信息。 
GDT 显示全局描述符表 
CLASS 显示WINDOWS的类的信息 
CPU 显示寄存器内容 
HEAP 显示Windows全局堆 
HWND 显示窗口句柄的信息 
IDT 显示中断描述符表 
LDT 显示局部描述符表 
LHEAP 显示Windows 局部堆 
MOD 显示Windows模块列表. 
PAGE 显示页表信息 
PCI 显示系统中每个PCI设备的情况. 
PROC 显示系统中所有进程的简要信息 
QUERY 显示某个进程的虚拟地址映象 
TASK 显示Windows任务列表 
THREAD 显示线程信息 
PHYS 显示某个物理地址对应的所有虚拟地址. 
   (四)跟踪调试控制命令 
这里的大部分命令都是原大名鼎鼎的Debug也有的,当然SoftICE中已经将他们的功能大大加强了。 
G 执行到某一地址 
X 从SoftICE窗口中退出 
HERE 运行到当前光标所在行 
P 单步执行程序. 在汇编模式中,当遇到 CALL,INT,LOOP,REP指令时,P将不跟踪进去,直到这些指令执行完毕,控制才返回SoftICE 
T 单步跟踪 
R 显示或更改寄存器的内容 
S 在内存中搜寻特定数据 
A 写入汇编代码 
C 比较内存中两块区域的内容 
D 用最后一次指定的形式显示内存 
   DB 以字节的形式显示内存 
   DW 以字的形式显示内存 
   DD 以双字的形式显示内存 
E 用最后一次指定的形式编辑内存 
   EB 以字节的形式编辑内存 
   EW 以字的形式编辑内存 
   ED 以双字的形式编辑内存 
F 填充某一块内存区域 
U 显示反汇编后的汇编码 
   (五)断点命令 
  中断是SoftICE中重要的功能。中断点的触发可以由内存某地址的读取、内存范围的存取、程序的执行及端口的存取来达成。SoftICE 赋与每个中断点一个一位的 16 进制号码( 0 - F ) 。这个中断点号码是当你对中断点做启动、删除、中止、编辑等动作时使用。SoftICE 的所有中断点在启动后不会自动消失。你必需以 BC 或 BD 命令来消除或关闭它。SoftICE 一次最多可以处理 16 个中断点。同种类型的中断点最多可以有 10 个。但内存地址的中断点 ( BPM ) 因 80386 处理器之寄存器的缘故,最多只能设 4 个。设置中断点时可以设个计数参数。计数参数是中断点真正触发作用前被忽略的次数。 
具体指令: 
   BPM BPMB BPMW BPMD --- 在内存地址被存取或执行时触发中断 
   BPR --- 对内存地址范围设置中断点 
   BPIO --- 对 I/O 端口存取时触发中断 
   BPINT --- 呼叫中断时触发中断 
BMSG 在WIN95的消息上设置断点 
  BPX --- 设置 / 清除 执行中断点 
CSIP (16位程序才有用) 为所有断点设定一个界限(CS:EIP在其内)(16位程序) 
   BPAND --- 等待复合中断点的发生 
   BD --- 中止中断点 
   BE --- 启动中断点 
   BL --- 列出中断点 
   BPE --- 编辑中断点 
   BPT --- 把中断点当样板 
   BC --- 清除中断点 
   (六)内存/端口存取命令 
SoftICE甚至提供了在Windows下直接存取物理内存的能力,当然武器在你手里,你得知道应该怎么用,否则就是号称永不死机的Windows 2000也会轻松崩溃。 
I 从输入/输出(I/O)端口读入数据 
O 向I/O端口输出数据. 
PEEK 从物理内存中读数据 
POKE 向物理内存写数据. 
ADDR 在SoftICE中显示或是切换内存区域 
符号/源码命令 
以下命令是对SoftICE中的源码及符号表进行操作的。SoftICE可以一次将多个符号表装入内存。SoftICE支持16,32位WINDOWS程序,DLLs,VxDs,Sys内核驱动程序.但每一时刻只能从一个符号表中取得符号,你若是要用某个符号表中的符号,必须先用TABLE命令选中。FILE则是用来选择当前显示的源文件。源文件可以有三种不同的格式显示:源程序、反汇编代码及两者混和。使用SRC可以使它在这三种不同格式中切换。 
FILE 显示或切换当前源文件 
TABLE 显示或切换当前符号表 
SRC 在源程序,反汇编代码,两者混和 之间切换显示. 
SS 在源程序文件中查找字符串 
EXP 显示DLL中的出口函数 
SYM 显示或设置符号 
SYMLOC 重定位符号基址 
   (六)其他操作命令 
? 计算一个表达式的值.并以十六进制,十进制,带符号的十进制显示结果 
. 当代码窗口可见时, 此命令使得当前的CS:EIP所指向的指令可见, 并且高亮显示 
EXIT 强行退出DOS程序或WINDOWS程序

[ Last edited by 小草大树 on 2004-10-14 at 11:00 AM ]


 

发表评论] [转寄该文] [关闭窗口]  [上一主题]  [下一主题
此文章相关评论:
该文章有13个相关评论如下:(点这儿论坛方式查看)

小草大树 发表于:2004/10/12 23:55

[引用该文]


最近刚装了SoftICE v4.27,确实是个好东西,我装的是精简版,是从SoftICE Driver Suite v2.7 提取出来的,安装好以后只有不到6M的空间。

4.27的安装配置界面和以往版本的区别比较大,这个帖子的图片也失效了,所以我再抓个图贴出来,感兴趣的朋友可以自己装一个试试。


下图对应上面的『三』

[ Last edited by 小草大树 on 2004-10-12 at 11:56 PM ]

其他附件列表:

 

 


 
 ↑顶部
小草大树 发表于:2004/10/12 23:58

[引用该文]


远程访问设置

其他附件列表:

 

 


 
 ↑顶部
小草大树 发表于:2004/10/13 00:07

[引用该文]


一般设置,

initialization-----初始化命令字符串,先用默认吧
video momery size是显卡显存,单位KB,我的是64M,所以添65536
Display diagnostic messages-------显示诊断信息
Trap NMI-----------支持非屏蔽中断
Lowercase disassembly-----小写反汇编(关闭)

其他附件列表:

 

 


 
 ↑顶部
小草大树 发表于:2004/10/13 00:11

[引用该文]


exports选项,配置SoftICE加载的动态链接库

Add---添加需要加载的Dll文件
remove--删除已经加载的DLL

其他附件列表:

 

 


 
 ↑顶部
小草大树 发表于:2004/10/13 00:19

[引用该文]


Serial Debugging---使用串口进行远程连接的设置
Network Debugging

Keyboard Mapping----可以修改和恢复SoftICE的预定义功能组合键的作用

其他附件列表:

 

 


 
 ↑顶部
小草大树 发表于:2004/10/13 00:27

[引用该文]


Macro Definitions-----宏定义,可以指定宏命令的最大数目,32-256

troubleshooting-----故障诊断(处理?)

=================================

Mouse------鼠标配置,现在常见的PS/2或USB滚轮鼠标就选第三项,而且Enhanced  Mouse选中。

其他附件列表:

 

 


 
 ↑顶部
小草大树 发表于:2004/10/13 00:33

[引用该文]


Video---------显卡配置,精简版比较简单,没的选,默认的standard VGA就可以了。最上面的选Universal Video Driver,这样SoftICE弹出后是窗口,否则选了弹出的是全屏DOS窗口,操作不方便,兼容性也不好。

设置好了后,点一下TEST按钮

其他附件列表:

 

 


 
 ↑顶部
小草大树 发表于:2004/10/13 00:34

[引用该文]


出现这个画面说明显卡测试正常,点“确定”

最后点ok按钮

其他附件列表:

 

 


 
 ↑顶部
小草大树 发表于:2004/10/13 00:40

[引用该文]


另外要注意的是:
    英文和中文的windows 2000操作系统打了sp4以后,Driver Studio 2.7在启动siwvid的时候机器就会蓝屏。DS v2.7对 Win2K SP4有个安装补丁,因为我们只装了SoftICE,所以没必要打全部补丁,只要打一个补丁就可以了,把这个补丁(官方的)拷贝到system32/drivers 目录,覆盖原文件即可

其他附件列表:

附件内容
名称:numega官方补丁.rar类别:rar
大小:27.89KB日期:2004/10/13 00:40
立即下载  [62次]

 

 


 
 ↑顶部
小草大树 发表于:2004/10/13 00:48

[引用该文]


最后,Numega 公司为windows2000 下的 SoftICE 设计了一个驱动程序:SoftICE Symbol Drive (SIWSYM),当 SoftICE 启动时为其提供文件映像表地址, SoftICE 根据这个表寻找所需的启动文件,从而能使其正常加载到系统中。驱动程序 SIWSYM 被放置在 ICEPACK.EXE 文件中,运行这个程序就可以自动完成必要的配置工作。

要注意的是:每次改变 SoftICE 的配置(直接编辑 WINICE.DAT 或通过 LOADER32 改变配置)后都要重新运行 ICEPACK.EXE ,这样才能保证新的修改起作用!


Using ICEPACK.EXE

The files are added to the SIWSYM driver by a command line 
utility called ICEPACK.EXE.  This utility will automatically load 
several files that SoftICE, as well as WINICE.DAT and any files 
that are referenced by WINICE.DAT (in LOAD= and EXP= lines).  
Be careful in how much space your symbols files require as that
much space (in RAM) is allocated to the INIT segment of the 
SIWSYM driver.  If your symbol files take up too much space, 
the SIWSYM driver will not load and your symbols and sources 
will not be available.

DON'T FORGET TO RUN ICEPACK.EXE!

Remember that any time you change one of the files referenced by 
WINICE.DAT, you need to re-run ICEPACK.EXE to update the 
SIWSYM.SYS file.  The same holds true if you modify WINICE.DAT 
itself (either manually, or via LOADER32).  If you forget to 
rerun ICEPACK.EXE, you will be debugging with out-of-date 
settings, symbols and sources!
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值