SoftICE for WIN95 中文命令详解(四):内存比较、类信息查看与显示控制
Copyright (c) 1999 https://coobe.cs.hn.cninfo.net/~tianwei
命令: C (Compare)
核心功能: 对比两段内存区域的数据内容,快速定位差异。
语法格式: C start-address l length start-address-2
参数用法:
- start-address: 第一块内存区域的起始地址
- length: 需要对比的字节长度
- start-address-2: 第二块内存区域的起始地址
执行后,若发现数据不一致,SoftICE 会清晰列出存在差异的地址及其对应的不同数值。
专家点评: 该命令是进行内存数据校验、分析程序内存状态的利器。
命令: CLASS
核心功能: 探查 Windows 系统及应用程序注册的窗口类信息。
语法格式: CLASS [-x][task-name]
参数用法:
- task-name: 指定当前系统中运行的16位或32位任务名称
- -x: 显示指定类的完整内部数据结构
Windows 95 系统在16位模块中维护着标准的 Windows 类。同时,它为每个独立进程维护着额外的私有类。程序注册新窗口类时,信息会存入以下两处之一:
- 任务全局列表:存放该进程内所有模块均可访问的类(使用 CS_GLOBAL 风格注册)。
- 任务私有列表:存放仅限注册模块自身访问的类。
当进程创建标准 Windows 类(如 LISTBOX)时,会从系统冗余列表中获得一份副本,从而避免影响系统核心。因此,使用 CLASS 命令可看到由虚线分隔的三类信息:
- 任务私有列表
- 任务全局列表
- 系统冗余列表
输出信息详解:
- Class Handle: 系统分配的类句柄。
- Class Name: 类名称。若注册时未命名,则显示对应的原子名。
- Owner: 注册此类的模块实例。
- Window Procedure: 处理该类消息的窗口过程地址。
- Style: 类的风格属性值。
专家点评: 深入理解 Windows 窗口类机制,对高级调试与逆向工程至关重要。
命令: CLS (Clear Screen)
核心功能: 快速清除 SoftICE 命令窗口中的所有字符。
语法格式: CLS
用法: 执行 CLS 命令将清空命令窗口的显示内容,并将光标重置到窗口左上角(前提是光标原本就在命令窗口内)。
专家点评: 保持调试界面整洁的基础命令。
命令: CODE
核心功能: 控制是否在反汇编窗口中显示指令的机器码。
语法格式: CODE [ON | OFF]
用法:
- CODE ON: 启用机器码显示,每条汇编指令前将附带其十六进制代码。
- CODE OFF: 关闭机器码显示,仅显示纯汇编指令。
- CODE (无参数): 查询当前的显示状态(ON 或 OFF)。
专家点评: 这是一个极其重要的调试命令。由于 SoftICE 默认安装为 CODE OFF 状态,分析人员常需手动开启。看到机器码便于精确记录指令特征,为后续的代码分析、补丁制作或破解工作奠定坚实基础。
命令: COLOR
核心功能: 自定义或查询 SoftICE 调试器界面的颜色方案。
语法格式: COLOR [normal bold reverse help line]
参数用法:
- normal: 普通文本的前景色/背景色,默认值 07h(灰色/黑色)
- bold: 粗体文本的前景色/背景色,默认值 0Fh(白色/黑色)
- reverse: 反显文本的前景色/背景色,默认值 71h(蓝色/灰色)
- help: HELP 命令提示条的前景色/背景色,默认值 30h(黑色/青色)
- line: SoftICE 各窗口分隔线的颜色,默认值 02h(绿色/黑色)
颜色参数遵循 CGA 标准格式:低4位(0-3)代表前景色,高3位(4-6)代表背景色。共提供16种前景色与8种背景色:
- 0 黑; 1 蓝; 2 绿; 3 青; 4 红; 5 品红;
- 6 棕; 7 灰; 8 深灰; 9 浅蓝; A 浅绿;
- B 淡青; C 浅红; D 淡品红; E 黄; F 白
专家点评: 虽然可以高度自定义,但默认配色方案已充分考虑长时间调试的视觉舒适度,建议新手谨慎修改,避免过于花哨影响专注力。
命令: CPU
核心功能: 全面显示 CPU 所有寄存器的当前内容与状态。
语法格式: CPU [-i]
用法: CPU 命令用于实时查看通用寄存器、控制寄存器、调试寄存器以及段寄存器的值。添加 -i 参数可显示更详细的系统信息。
专家点评: 集成在 SoftICE 中的强大 CPU 状态监视器,无需借助外部工具即可洞察处理器核心状态,极大提升调试效率。
命令: CSIP (主要针对16位程序)
核心功能: 为断点设置有效的代码段(CS)和指令指针(EIP)范围限制。
语法格式: CSIP [off | [not] start-address end-address | Windows-module-name]
参数用法:
- off: 关闭 CS:EIP 范围检查,所有断点全局有效。
- not: 使断点仅在指定范围或模块“之外”的区域触发。
- start-address: 内存区域的起始地址。
- end-address: 内存区域的结束地址。
- Window-module-name: 使用 Windows 模块名来定义地址范围。
不带参数执行 CSIP 将显示当前的限制状态。请注意,此命令主要针对16位程序。对于32位程序,应使用带 IF 条件判断的断点命令(BPX)来实现类似功能。在 Windows 95 环境下调试遗留的16位应用程序或模块时,此命令非常实用。
专家点评: 精准控制断点作用域,避免在无关代码区域中断,是高效调试16位代码的关键。
命令: D (Display)
核心功能: 以多种格式显示指定内存区域的内容。
语法格式: D[size] [address [l length]]
参数用法:
- size: 指定数据显示格式。B-字节;W-字;D-双字;S-短实型;L-长实型;T-10字节长实型。
D 命令从指定地址开始,按给定长度显示内存内容。显示格式由 size 参数决定。
对于双字(D)格式,显示规则如下:
- 若指定地址位于32位段,则以8位十六进制数(32位值)显示。
- 若指定地址位于16位段,则以“段:偏移”(16:16指针)格式显示。
若不指定地址,则从上一次显示结束的地址继续显示。若数据窗口可见,结果通常显示在数据窗口;否则显示在命令窗口。但若使用了 L 参数明确指定了长度,则结果强制输出到命令窗口,无视数据窗口状态。
专家点评: 内存查看是调试的基础,熟练掌握 D 命令及其格式参数是每一位调试人员的必备技能。
