注意:以下讲述的是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 |
[引用该文] |
|||||||||||||||||
↑顶部
|
|||||||||||||||||||
小草大树 |
发表于:2004/10/12 23:58 |
[引用该文] |
|||||||||||||||||
|
|||||||||||||||||||
↑顶部
|
|||||||||||||||||||
小草大树 |
发表于:2004/10/13 00:07 |
[引用该文] |
|||||||||||||||||
|
|||||||||||||||||||
↑顶部
|
|||||||||||||||||||
小草大树 |
发表于:2004/10/13 00:11 |
[引用该文] |
|||||||||||||||||
|
|||||||||||||||||||
↑顶部
|
|||||||||||||||||||
小草大树 |
发表于:2004/10/13 00:19 |
[引用该文] |
|||||||||||||||||
|
|||||||||||||||||||
↑顶部
|
|||||||||||||||||||
小草大树 |
发表于:2004/10/13 00:27 |
[引用该文] |
|||||||||||||||||
|
|||||||||||||||||||
↑顶部
|
|||||||||||||||||||
小草大树 |
发表于:2004/10/13 00:33 |
[引用该文] |
|||||||||||||||||
|
|||||||||||||||||||
↑顶部
|
|||||||||||||||||||
小草大树 |
发表于:2004/10/13 00:34 |
[引用该文] |
|||||||||||||||||
|
|||||||||||||||||||
↑顶部
|
|||||||||||||||||||
小草大树 |
发表于:2004/10/13 00:40 |
[引用该文] |
|||||||||||||||||
|
|||||||||||||||||||
↑顶部
|
|||||||||||||||||||
小草大树 |
发表于:2004/10/13 00:48 |
[引用该文] |
|||||||||||||||||
|