写在前面
第一部分(.-A)
第二部分(B-B)
第三部分(B-B)
第四部分(C-D)
第五部分(D-F)
第六部分(F-G)
第七部分(H-I)
第八部分(I-L)
第九部分(M-P)
第十部分(P-P)
第11部分(P-S)
第12部分(S-T)
第13部分(T-V)
第14部分(V-W)
第15部分(W-Z)
  SoftICE for WIN95中文命令解说(七)
  Copyright (c) 1999 http://winice.yeah.net
命令: H
作用: 显示帮助信息
语法: H [command]
用法:
		
键入 H 命令不带任何参数将显示所有命令的帮助. 要
获得详细的帮助,在 H 后加命令名就可.详细的帮助将
包括命令的描述,命令的语法,和例子.
点评:
		
H 命令可以很方便地帮助使用者查询SoftICE的命令.
实际上在命令窗口的底部有一个状态条,它提供的实时
帮助也是很有用的.
命令: HBOOT
作用: 系统重新启动
语法: HBOOT
用法:
		
HBOOT 将重新启动计算机.等同于按 Ctrl+Alt+Del 组
合键.HBOOT 一般都能成功,只有特殊情况下(某些插卡
需要重加电)才用机器上的RESET或POWER键.
点评:
		
HBOOT 让我想到两件事:
1,以前学微机时,老师老是盯着我们,唯恐我们乱启动
机器.想起来真是不寒而栗, 好象是我们的过错一样.
可机器明明死了嘛,不重新启动怎么行?
2,有大部分品牌机上没有RESET键, 死机就按POWER键
,按得老板倒抽凉气.:)
命令: HEAP
作用: 显示Windows全局堆
语法: HEAP -L [free | module-name | selector]
用法:
		
-L         : 只显示含局部堆的全局堆入口
module-name: 模块名.
selector   : LDT 选择符

HEAP FREE 将显示空闲的全局堆.
HEAP 跟模块名将只显示由指定的模块拥有的全局堆入
口. HEAP 跟LDT 选择符将只显示与此选择符相应的全
局堆入口. HEAP 不带参数将显示整个全局堆的情况.

输出:
selector or handle: 选择符符或句柄.
address           : 32位虚拟地址
size              : 堆的大小(字节)
module name       : 模块名
        --------------------------------
        type      : 全局堆的类型
        code      : 不可丢弃的代码段
        code D    : 可丢弃的代码段
        Data      : 数据段
        ModuleDB  : 模块数据基础段
        TaskDB    : 任务数据基础段
        BurgerM   : "三明治"(就是堆本身)
        Alloc     : 被动态分配的内存
        Resource  : Windows 资源
        --------------------------------
        
        额外信息:
        如果某全局堆的入口是代码段或数据
        段,则会显示该段在.EXE中的段号.如
        果某全局堆的入口是Windows资源,则
        会附加显示如下资源类型:
        --------------------------------
        UserDef(用户自定义);Icon(图标); 
        String(字符串); Accel(快捷键);
        IconGrp(图标组);Cursor(光标); 
        Menu(菜单);FontGrp(字体组);
        ErrTable(错误表);NameTabl(名字表);
        Bitmap(位图);Dialog(对话框);
        Font(字体);CursGrp(光标组)
        --------------------------------
		
点评:
		
PDF 手册中称堆本身为Burger-->"三明治"(碎肉夹饼)
很贴切,堆本来就是乱七八遭.
命令: HEAP32
作用: 显示Windows全局堆
语法: HEAP32 [hheap32 | task-name]
用法:
		
hheap32  : 由HeapCreate()返回的堆句柄.
task-name: 32位任务的名字.

HEAP32 不带参数显示32位进程的堆的情况:
.KERNEL32 缺省系统堆.
.进程用HeapCreate()申请的私有堆.
.两个由VMM产生的Ring-0级的堆.第一个是换页锁定的
 堆,第二个是可换页的堆.
.一个属于所有虚拟机的Ring-0堆.
		
如果加上进程名,SoftICE将显示所有该进程的缺省堆,
且地址内容也切换到该进程中.如果加上堆的基地址而
不是进程名,SoftICE将显示该进程的非缺省堆.

WINDOWS 95的调试版还提供了额外的调试信息,想要用
SoftICE看到这些信息,必须:
.对于KERNEL32 Ring-0堆,必须安装有SDK除错版.
.对于VMM Ring-0堆,必须安装VMM的DDK除错版

输出信息(HEAP32):
HeapBase : 堆的基址
MaxSize  : 堆可增长的最大范围, 在此范围内堆无需
           再创建一个新段.
Committed: 以千字节为单位当前存在于物理内存中的
           被保证的内存大小
Segments : 堆中段的数量. 当堆增长超出段所能容纳
           的范围,就建立一个新段
Type     : 堆的类型:
        --------------------------------
        Private: 由应用程序建立的Ring-3堆
        System : KERNEL32建立的Ring-3堆
        Ring0  : VMM建立的Ring-0堆
        VMM##  : 由VMM建立的为特定虚拟机
                 存储数据的堆.
        --------------------------------
        
输出信息(HEAP32 带参数):
Address: 堆元素的地址.
Size   : 以字节为单位堆元素的长度.
Free   : 如果堆元素是空闲的块,则会显示"FREE",否
         则不显示.
点评: 在SoftICEv3.20实际操作上和手册说的中有些许不同.
命令: HERE
作用: 运行到当前光标所在行
语法: HERE
用法:
		
HERE 命令让程序一直走到光标所在行再停下来.注意:
只有当光标在代码窗口中时才有效.如果代码窗口不可
见或光标不在代码窗口中,则请用 G 命令代替.也可用
 EC 命令将光标移到代码窗口中去,再用 HERE.
HERE 命令有个快捷键 F7.将光标定位到你想让程序暂
停的指令处,按下F7 ,程序将在此处设一个一次性断点
.程序中其他非一次性的断点照样起作用. 无论是谁先
弹出,都将清除 HERE 所下的一次性断点.和G命令一样
,HERE 命令尽量采用除错寄存器DRx, 只有用完时才用
INT 3
点评: 无.
命令: HWND
作用: 显示窗口句柄的信息
语法: HWND [-x][hwnd | [[level][process-name]]
用法:
		
level       : 窗口等级号码.0 是最高级.1 其次,等
              等.窗口等级代表了父窗口和子窗口的
              关系.
-x          : 显示窗口的冗余信息.
hwnd        : 窗口句柄.
process-name: 任何当前进程名

如果指定了窗口句柄,就无需指定等级, 进程名等其他
参数,SoftICE将显示所指定窗口句柄的信息.
输出: Class Name : 此窗口所属类的名称或类的原子. Window Procedure: 窗口函数.
		
点评: 窗口句柄很有用的.(废话!)
命令: I
作用: 从输入/输出(I/O)端口读入数据
语法: I[size] port
用法:
		
size: B 字节(默认);W 字;D 双字
port: 端口地址.
I 命令在大多数情况下是作一个I/O输入指令, 获取真
实的硬件端口的数据. 在虚拟端口的情况下,取得真实
值和应用程序所见到的虚拟值可能不同. 对于 21h 和
A1h 端口,SoftICE是例外,它不进行读取,而是返回So-
ftICE弹出时的值.
点评: 参见 O 命令.
  回到文章的开头