SOFT-ICE命令详解 (3) P-Z 命令: P 作用: 单步执行程序. 语法: P [ret] 用法: P 命令将单步执行程序.在汇编模式中,当遇到 CALL, INT,LOOP,REP指令时,P将不跟踪进去,直到这些指令执行完毕,控制才返回SoftICE,换句话说,P命令是"跨"过这些指令的.P 后加RET 参数,SoftICE将一直单步执行直到它找到一条返回语句(RET,RETF).在源程序模式中,P 命令将执行一个源程序表达式. 但也不跟踪到子例程中去.P 命令实际上是利用了单步标志, 大多数情况下是如此.但碰到CALL,INT,LOOP,REP指令时,就用INT 3 (一次性) 在这些指令的后面设一下. P 命令有快捷键 F10; P RET 命令有快捷键 F12. 点评: F10可能是按得最多的键了,好好保护你的键盘吧! 命令: PAGE 作用: 显示页表信息 语法: PAGE [address [L length]] 用法: address : 段:偏移量 或 选择符:偏移量 格式的地址 length : 要显示页的数量.PAGE 命令用来列出当前页目录和各个页表的情况.(在Windows NT 中可以实现列出多个页目录的情况, 这里就不涉及了) 在x86的体系中, 一个页目录包含1024个页目录项(每个页目录项占4个字节)每个页目录项又指向一个页表,每个页表包含1024个页表项 (每个页表项也占4个字节),每个页表项指向一个4KB大小的页.所以这样的体系管理着1024*1024*4=4GB大小的空间. PAGE 加地址参数将显示映射到相应地址处的页表项的内容,包括以下部分:.由该页表项映射的页的线性虚拟地址..由该页表项映射的页的物理地址..该页表项的各种特性,比如是否在内存中,存取权限等.这里的特性是CPU架构时确定的..该页的类型,这个是页表项中的Windows定义位决定的.PAGE 加地址,加L参数将显示连在一块的若干个页表项但要注意的一点是:PAGE命令在显示这样一块连续页表项区域时,不会跨过页表界线. 也就是说显示出来的页表项有可能会少,这时再用一个PAGE就可.PAGE 不加参数将显示当前页目录的内容. 第一行显示页目录的物理和线性地址.后面的每一行显示一个页目录项的内容. 输出: physical address: 物理地址.如果显示的是页目录,(即PAGE不加参数),这个地址是页目录项的物理地址,即相应页表的地址. 如果显示的是页表,(即PAGE 加地址参数), 则这个地址是内存中相应页的物理地址. linear address : 线性地址.如果显示的是页目录,(即PAGE不加参数),这个地址是页目录项的线性地址,即相应页表的地址. 如果显示的是页表,(即PAGE 加地址参数), 则这个地址是内存中相应页的线性地址. 如果加L参数,则此地址是第一个页的线性地址. attribute :下面是页目录项或页表项的属性: --------------------- P 在内存中 NP 不在内存中 D 又脏又快的DOS! A 存取位 U 用户属性 S 管理员属性 R 只读 --------------------- type :每个页表项在架构中都留有一个 3bit的OS字段,被操作系统利用,Windows就定义如下的类型: --------------------- System Private Instance Relock VM Hooked --------------------- 系统 私有 实例 重锁 虚拟机 钩子 --------------------- 点评: 无   命令: PAUSE 作用: 满屏后是否暂停显示 语法: PAUSE [ON │ OFF] 用法: PAUSE 命令将控制是否在SoftICE命令显示输出到达满屏后暂停.默认PAUSE 为ON,即在满屏时暂停. PAUSE命令不加参数将显示当前状态. 点评: 也可用SET PAUSE [ON│OFF]   命令: PCI 作用: 显示系统中每个PCI设备的情况. 语法: PCI 用法: PCI 命令显示系统中每个PCI设备的配置寄存器内容.不要在非PCI的系统上使用这个命令. 大多数输出的内容都一目了然,少数的没有说明,可以参考PCI详细的说明书. 点评: 我倒是用它来看显卡的制造商.   命令: PEEK 作用: 从物理内存中读数据 语法: PEEK[size] address 用法: size : B 字节(默认值);W 字;D 双字; address: 物理内存地址. PEEK 命令显示从指定物理内存中来的指定大小的数据 PEEK 命令在读取内存映象的I/O 寄存器的值时很有用. 点评: 参见POKE   命令: PHYS 作用: 显示某个物理地址对应的所有虚拟地址. 语法: PHYS physical-address 用法: physical-address: 物理地址, 是由x86的分页机构转换来的.这个物理地址是传到计算机的总线上的地址. 而且在操作内存映象的硬件设备时(如显存 )显得特别重要. Windows用x86体系的虚拟寻址方式在虚拟地址(被程序用到)和物理地址(被硬件设备用到)之间建起一座桥梁.在很多情况下,一段物理地址可能出现在多个页表项中,所以就存在一个物理地址对多个虚拟地址.SoftICE在表达式中不接受物理地址,所以应用PHYS 命令来进行转换. 点评: 无   命令: POKE 作用: 向物理内存写数据. 语法: POKE[size] address value 用法: size : B 字节(缺省值);W 字;D 双字 address: 物理内存地址; value : 要输出字节,字,或双字. POKE 命令将往指定的物理内存地址处写指定大小的数据.这对在写内存映象的I/O 寄存器的值时很有用. 点评: 无   命令: Print Screen键 作用: 打印屏幕内容 语法: 按下PrintScreen键 用法: 这个功能将SoftICE屏幕上的内容输出到打印机. 默认的打印机端口是LPT1.可以用PRN命令来改变打印端口.由于SoftICE对外设的读写是直接往I/O端口的,所以这个功能只能用于直接联接在COM口或LPT口上的设备,而不支持网络打印.也可以用SoftICE Loader将内容记录到文件中去. 点评: 打印机我没有试过,可用Loader将内容都记录下来是非常不错的,有时记录一段小代码不必动用w32dasm了,用Loader就可以代替,非常好的,我推荐您试一下!!!! 命令: PROC 作用: 显示系统中所有进程的简要信息 语法: PROC [-xo] [task] 用法: -x: 即-eXtended : 显示每个线程的扩展信息 -o: 即-Objects : 显示在进程句柄表中的对象列表 task : 任务名 输出: Process : 任务名 pProcess : 指向进程数据库的指针 Process ID : 进程的Ring 3的ID Threads : 进程所拥有的线程数量 Context : 地址区域 DefHeap : 缺省堆 DebuggeeCB : 调试块 点评: 无   命令: QUERY 作用: 显示某个进程的虚拟地址映象 语法: QUERY [[-x] address] │ [process-type] 用法: -x : 显示某个线性地址在所有有效的地址区域中的内存映象 address : 线性地址 processtype: 可被解释成进程的表达式 QUERY 命令可以显示某个进程的虚拟地址映象或某个线性地址的映象.如果QUERY命令不加任何参数,将显示当前进程的映象. 输出: Base : 指向连续页的基址 AllocBase : 由VirtualAlloc函数申请的内存的基址 AllocProtect:在申请时被指定为存取保护 Size : 有相同特性的页组成的内存区的大小Bytes State : 内存区中页的状态: ---------------------------------- .Commit 受委托的页,意即物理定位的. .Free 空闲的页,可以被申请 .Reserve 保留 ---------------------------------- Protect : 当前存取保护 Owner : 内存区的所有者 Context : 地址区域 点评: 无 命令: R 作用: 显示或更改寄存器的内容 语法: R [-d │ register-name │ register-name [=] value] 用法: register-name: 以下任何一种: ---------------- AL,AH, AX,EAX BL,BH, BX,EBX CL,CH, CX,ECX DL,DH, DX,EDX DI,EDI,SI,ESI BP,EBP,SP,ESP IP,EIP,FL,DS ES,SS,CS,FS,GS ---------------- value : 将要修改的寄存器内容.寄存器名除 FL(标志寄存器)以外,其他所有的都是 16进制的值.如果是FL的话,value应如下: ---------------- O 溢出位 D 方向位? I 中断位? S 符号位 Z 零标志 A 辅助进位 P 奇偶位 C 进位标志 ---------------- 在相应的标志前加"+","-"号,表示打开或关闭如: R FL +O 将溢出标志置位.如果不带"+,-"号,则将当前的状态反转. -d :在命令窗口中显示寄存器的值. 如果 R 命令不加参数,光标将移到寄存器窗口中,进行实时修改.如果当前寄存器窗口不可见, 那么这个命令将自动显示它. 另外,修改FL寄存器时,参数不必按照顺序,如: R fl=o+a-c 一次修改3个标志位. 点评: 无 命令: RS 作用: 暂时恢复程序屏幕 语法: RS 用法: RS 命令允许用户暂时恢复程序的视屏画面. 这个命令在调试频繁更新屏幕的程序时特别有用.当显示出程序的原画面后,可以按任意键返回SoftICE.RS有个快捷键F4. 点评: 无   命令: S 作用: 在内存中搜寻特定数据 语法: S [-cu][address L length data-list] 用法: address :搜索的起始地址 length :搜索的长度(字节长) data-list:可以是一系列字节,也可以是字符串,字符串可以用单引号,也可以用双引号括住.-c :使查找区分大小写 -u :查找Unicode 编码的字符串. S 命令将从指定的内存地址开始查找指定内容的数据,一直到超过指定的长度为止.如果查到相应数据,会在当前的数据窗口中显示它,并在命令窗口中显示信息.想要继续查找,则只要打入 S 即可,不需另外带参数.S 命令忽略被标记为不在内存中的页. 想搜索一大段内存的话,请用一马平川的30做为选择符. 点评: 无. 命令: SERIAL 作用: 将控制台转移到串口终端上 语法: SERIAL [on [com-port] [baud-rate] │ off] 用法: com-port : 从1-4,分别代表COM1,COM2,COM3,COM4其中COM1是默认值. baud-rate: 波特率,默认值由SoftICE自动侦测. 可能值为:1200,2400,4800,9600,19200,23040,28800,38400,57000,115000. 用一条电缆将两台机器的COM口联起来, 有被调试程序的机器称为本地机(local), 另一台做为控制台的机器称为远程机(remote).在联接前, 远程机上必须运行软件包中的serial.exe程序,所以,远程机至少要是MSDOS操作系统.Serial.exe 程序的命令格式和Serial 指令的格式一致. 当联接建立后,本地机的屏幕将恢复被调试程序的屏幕(即windows屏幕), 而远程机将显示Sof-tICE的调试窗口.电缆的做法如下: 25Pin的电缆 =========================== 远程 本地 2 ---------------------- 3 3 ---------------------- 2 4 ---------------------- 5 5 ---------------------- 4 6 ---------------------- 20 8 -----^ 20---------------------- 6 ^------- 8 7 ---------------------- 7 =========================== 9 Pin的接法: =========================== 本地 远程 2 ---------------------- 3 3 ---------------------- 2 5 ---------------------- 5 7 ---------------------- 8 8 ---------------------- 7 6 ---------------------- 4 1 ------^ 4 ---------------------- 6 ^------ 1 =========================== 注:表中的^代表相接.如上面的表示6和1先相接,再接对方的4 远程机上总可以用CTRL+D 来激活调试.结束调试可以在远程机上打入SERIAL off远程机要退出serial.exe程序可以用CTRL+Z 点评: 无   命令: SET 作用: 显示或改变SoftICE的内部参数 语法: SET [keyword] [on │ off] [value] 用法: keyword : 内部变量 value : 有些变量有数值量,不是简单的ON,OFF Set 命令用来设置SoftICE的内部变量. 不加参数将显示所有这些变量的当前状态, 只加keyword将只显示当前变量的状态. 变量列表 ---------------------- ALTSCR [ON│OFF] CASESENSITIVE [ON│OFF] CODE [ON│OFF] EXCLUDE [ON│OFF] FAULTS [ON│OFF] FLASH [ON│OFF] I1HERE [ON│OFF] I3HERE [ON│OFF] LOWERCASE [ON│OFF] MOUSE [ON│OFF][1,2,3] PAUSE [ON│OFF] SYMBOLS [ON│OFF] TABS [ON│OFF][1,2,3,4,5,6,7,8] THREADP [ON│OFF] VERBOSE [ON│OFF] ---------------------- CASESENSITIVE ON 将使符号名对大小写敏感MOUSE 允许或禁止使用鼠标.还可以设定鼠标移动的速度,1最慢,3最快,2是中速,也是缺省值. SYMBOLS ON 将允许反汇编器在代码中显示符号名. 如果为OFF,将只显示数字化的地址等.其余见它们各自的命令解释. 点评: 无 命令: SHOW 作用: 列出回溯跟踪历史缓冲区中的指令 语法: SHOW [B │ start] [l length] 用法: start : 十六进制的值, 用以确定从回溯跟踪缓冲区 开始反汇编的指令序号. 为 1表示是缓冲区 中的最新一条指令. length : 显示几条指令. SHOW命令将从SoftICE的回溯跟踪历史缓冲区中显示指 令.如果有源程序的话,将显示源程序与反汇编代码,若 没有,则只显示汇编指令. 结果将在命令窗口中显示,所有指令都有一个数字前缀 用来表示指令的序号.1 是最新的指令. 可以用上下光 标键来浏览,用ESC键退出. SHOW 不带参数或加B 参数将从缓冲区中最旧的一条指 令开始显示. SHOW 带序号参数将从指定的序号开始显 示指令. SHOW 命令只在回溯跟踪历史缓冲区不为空时才有用. 用BPR 的 T ,TW参数来装满它! 点评: 无   命令: SRC 作用: 在源程序,反汇编代码,两者混和之间切换显示. 语法: SRC 用法: SRC 命令将在程序源代码,反汇编后的指令, 或两者混 合之间来回切换显示.SRC 的快捷键为 F3. 点评: 注意:要在当前程序有源文件时这一功能才能奏效, 例 如:用BORLAND C编程序时,所调试的程序example.c; example.obj,example.exe 都存在才可以.   命令: SS 作用: 在源程序文件中查找字符串 语法: SS [line-number] ['string'] 用法: line-number :十进制数的行号 string :用引号括起来的字符串 SS 命令将从指定的line-number(行号)开始,在当前的 源程序文件中查找字符串.如果查找到附合要求的数据, 将在代码窗口的第一行处显示. 如果不指定行号,则SS将从当前代码窗口的第一行处开 始查找.不带任何参数的SS命令将继续上次的查找. 注意:在用SS命令之前必须使代码窗口可见, 并使代码 窗口显示源程序文件才可. 点评: 无   命令: STACK 作用: 显示某个调用栈 语法: STACK [task-name │ SS:[E]BP] 用法: task-name :可以用TASK命令看到的任务名 SS:[E]BP :某个有效的栈框的SS:[E]BP值 STACK 命令用来显示DOS程序,Windows任务, 32位代码 的调用栈.STACK命令不加参数的话,当前的SS:[E]BP的 值被默认为栈框的基址.也可以加任务名或SS:[E]BP来 明确指定一个. 点评: 无   命令: SYM 作用: 显示或设置符号 语法: SYM [[section-name] ! ] symbol-name [value]] 用法: section-name : 有效的区段名.可以只打部分字母. 区段名后要加!号,如: SYM .TEXT! 将显示可执行文件中.TEXT区段的 所有符号. ! : 如果只加参数 ! ,将只显示此符号 表中的模块. symbol-name : 有效的符号名,可以加*来模糊寻找. value : 用来将某个符号设为某个指定地址. SYM命令用来显示和设置符号地址.SYM命令在找寻某个 你或许只记得部分名字的符号时特别有用,可以用* 来 代替末尾的字符,也可以用 ,(逗号)来代替某一个字符 点评: 无   命令: SYMLOC 作用: 重定位符号基址 语法: SYMLOC [segment-address │ o │ r │ -c process-type │ (section-number selector linear-address)] 用法: segment address :段基址,只在DOS中有用 o :对16位的表起作用.使所有选择符 恢复原序 r :对16位的表起作用.改变所有段值 为适当的选择符. -c :指定一个context值. section-number :32位表.PE文件中从1开始的区段 selector :32位表.保护模式的选择符 linear-address :32位表.区段的基址 SYMLOC 命令可对一个已装载的符号表进行调整. 点评: 无   命令: T 作用: 单步跟踪 语法: T [=start-address] [count] 用法: count :指定SoftICE将单步跟踪多少次才停止. T 命令是利用CPU的单步标志来进行单步跟踪的. 如果指定 start-address,SoftICE 将从指定的地址处 开始单步跟踪.如果寄存器窗口可见, 则寄存器窗口将 高亮显示哪些改变的寄存器的值. 点评: 无   命令: TABLE 作用: 改变或显示当前符号表 语法: TABLE [partial-table-name] │ autoon │ autooff │ $ 用法: partial-table-name:符号表的名字或开头的几个字符 autoon :用来打开自动符号表切换功能 autooff :用来关闭自动符号表切换功能 $ :用$ 来表示切换到当前指令所在 的表中. TABLE 命令当你有多个符号表装入内存的时侯很有用. SoftICE支持16,32位WINDOWS程序,DLLs,VxDs,DOS程序 DOS设备驱动程序,TSRs. 每一时刻只能从一个符号表中取得符号,你若是要用某 个符号表中的符号,必须先用TABLE命令选中! 关键字AUTOON将使SoftICE每次弹出都自动切换到当前 指令所在的符号表中.而AUTOOFF正相反. 点评: 无 命令: TABS 作用: 显示或修改在显示源文件时TAB键的宽度 语法: TABS [tab-setting] 用法: tab-setting : 从1到8,表示TAB键的跨度用TABs命令或SET TABS都可设置TAB键的跨度(列), 默认值是8. TAB 命令不加参数将显示当前的TAB键设置. 点评: 不过我用的3.20默认是4   命令: TASK 作用: 显示Windows任务列表 语法: TASK 用法: TASK 命令将显示当前机器中运行的所有任务. 当前的任务前面会有一个 * 号.这个命令在WINDOWS出现所谓的general protection fault 时可以帮助你确定是由哪个任务引起的.输出: Task Name :任务名 SS:SP :该任务最后交出控制时的堆栈地址. StackTop :堆栈偏移的顶 StackBot :堆栈偏移的底 StackLow :当产生地址切换时最低的SP值 TaskDB :任务数据基址的选择符 hQueue :任务的队列句柄. Events :队列中事件 点评: 无   命令: THREAD 作用: 显示线程信息 语法: THREAD [TCB │ ID │ task-name] 用法: TCB :线程控制块 ID :线程ID task-name :当前运行的32位过程. THREAD 命令将显示某个线程的信息. 如果不带任何参数,将显示当前系统中所有活动的线程,如果将某个进程名作为参数,将显示所有该进程的线程,如果指定TCB或ID,则只显示指定的线程. Ring0TCB :Ring-0线程控制块的地址. ID :VMM线程ID Context :该线程所属进程的context句柄 Ring3TCB :Ring-3线程控制块的地址 ThreadID :Ring-3线程ID Process :拥有该进程的KERNEL32进程数据库的地址 TaskDB :任务数据的选择符 PDB :程序数据的选择符(PSP) SZ :线程的大小(16,32) Owner :进程的所有者. 点评: 无   命令: TRACE 作用: 进入或退出摹拟跟踪模式 语法: TRACE [b │ off │ start] 用法: start :16进制的值.用来表示回溯跟踪历史缓冲区中指令的序号.1 表示最新的一条指令. TRACE 命令不带参数将显示当前摹拟跟踪的状态. TRACE OFF 将退出当前的摹拟跟踪模式,回到正常的跟踪模式下. TRACE B 从最老的一条指令开始摹拟跟踪. TRACE 加数字将从指定的序号开始摹拟跟踪.只有当回溯跟踪历史缓冲区不为空时才能用TRACE命令,参见BPR命令的说明. 回溯(摹拟)跟踪中可以用XT,XP,XG来跟踪程序,寄存器窗口中除了EIP改变外,其他的都不变,因为SoftICE 在回溯跟踪中不记录所有寄存器的值.SoftICE 的命令除了 X,T,G,P,HERE,XRSET不能在回溯跟踪模式下用外其他都可以使用. 点评: 无   命令: TSS 作用: 显示任务状态段和I/O端口的挂接 语法: TSS [TSS-selector] 用法: TSS-selector :任何代表是个TSS的GDT选择符 TSS命令通过读取TR命令来获得地址, 从而显示任务状态段的内容.用GDT命令可以看到TSS选择符.如果TSS命令不加参数,将显示当前的TSS. 输出: TSS selector value :TSS选择符 selector base :TSS的线性地址 selector limit :TSS的大小 下面四行显示TSS中寄存器的内容: LDT, GS, FS, DS, SS, CS, ES, CR3 EAX, EBX, ECX, EDX, EIP ESI, EDI, EBP, ESP, EFLAGS Level 0, 1 and 2 stack SS:ESP 下面将显示被VxD挂接的I/O端口 port number :16位的端口号 handler address :32位的I/O句柄地址 handler name :句柄的符号名. 点评: 无   命令: TYPES 作用: 列出当前内存区域(context)中的类型名 语法: TYPES [type-name] 用法: type-name : 显示指定的类型名 TYPES 命令不加参数将显示当前所有的类型名.如果加参数将只显示所指定的类型.如果参数是个结构,TYPES将自动展开结构,并显示其成员. 点评: 无   命令: U 作用: 反汇编指令 语法: U [address [l length]] │ [symbol-name] 用法: address : 段:偏移量或选择符:偏移量 symbol-name : 将从指定的函数开始反汇编 length : 反汇编的长度(字节) U 命令将从指定地址开始反汇编指定长度的指令.如果代码窗口可见,则显示结果将在代码窗口中, 否则在命令窗口中. U 命令跟symbol-name(符号名)如果当前符号表装载的话,U 命令可以从指定的符号地址开始反汇编. 点评: 可用U在命令窗口中反汇编,再用LOADER32存盘 命令: VCALL 作用: 显示VxD可调用例程的名字和地址 语法: VCALL [partial-name] 用法: partial-name:符号表的名字或开头的几个字符. VCALL 命令将显示Windows VxD API例程的名字和地址这些例程是Windows本身的VxD提供的并为为其他VxD准备的.所显示的地址只有当VMM VxD初始化过后才有效,如果SoftICE的初始化字符串中没有一个 X;SoftICE将在Windows启动但VMM没有初始化时弹出. 点评: 无 命令: VER 作用: 显示SoftICE版本号 语法: VER 用法: 用Loader32的ABOUT也可以显示详细的信息. 点评: 无   命令: VM 作用: 显示虚拟机的信息 语法: VM [-S] [VM-ID] 用法: -S : 切换到由VM-ID标识的VM VM-ID : 虚拟机的序号.从1开始,并且1是赋予Windows系统VM的.(Windows应用程序在这个VM上运行),如果VM 命令不加参数,SoftICE将显示系统中所有虚拟机的信息.如果加 VM-ID 参数,该VM的寄存器值将被显示.这里的寄存器值是在VM控制块用户区中的寄存器值.所以,这些寄存器表示的是最后当有内存地址切换时存入该控制块时的值.当SoftICE弹出时正好某个VM 正在 运行的话,在寄存器窗口中的值才是真正当前的值, 而不是用VM命令在命令窗口中看到的值. 有一点要注意: 如果你在某个中断例程中的头几句指令处,而此时这个VM的寄存器值正在被存入控制块,那么可能当前只有CS:IP的值(由VM显示)是真的.其余的有可能还没有存入控制块.命令窗口中显示两组CS:EIP和SP的值. 分别代表保护模式和实模式.两者的排列是由VM最后的执行模式决定的.如果最后是在保护模式中切出来的,那么先显示PROT.反过来就先显示REAL.一般情况下,除了系统VM之外,其他的VMs只有一个V86线程.但是DPMI程序会从V86转到保护线程. VM命令在调试VxDs,DPMI程序,DOS程序时比较有用.如果一个DOS程序在运行时挂起,你可以用VM命令看到该VM最后执行的一条指令. 输出: status: --------------------------------- 0001H 独占模式 0002H 后台运行 0004H 正在建立 0008H 暂时终止 0010H 部分被破坏 0020H 执行保护模式指令 0040H 执行保护模式程序 0080H 执行32位保护模式程序 0100H 从VxD中调用CALL 0200H 后台高度优先权 0400H 信号阻断 0800H 阻断唤醒 1000H V86程序的部分可换页 2000H V86程序其他的部分被锁定 4000H 时间切片 8000H 空闲,已释放时间片 --------------------------------- 点评: 无 [命令]   命令: VXD 作用: 显示Windows VxD 映象 语法: VXD [VxD-name] 用法: VxD-name : 虚拟设备驱动程序的(部分)名字 VXD 命令将显示指定的某个VxD的信息.如果不加参数, VXD命令将显示系统中所有的虚拟设备驱动程序的映象. 动态装载的VxD将显示在静态装载的VxD后面. 输出: VxDName : VxD 名字 Address : 段基址 Length : 段的长度 Seg : 可执行部分的区段数 ID : VxD的ID DDB : VxD描述符块的地址 Control : 控制分配句柄的地址 PM : Y表示该VxD有一个保护模式的API,N相反 V86 : Y表示该VxD有一个V86API,N相反 VXD : 实现的VxD服务数 Win32 : 实现的Win32服务数 点评: 无   命令: WATCH 作用: 加入一个监视窗口 语法: WATCH expression 用法: WATCH 命令监视所指定表达式的值.目标数的大小由它本身的类型信息提供. SoftICE在无法确定大小时默认为双字.SoftICE一次最多支持8个表达式.每次SoftICE弹出,表达式的当前值就会在监视窗口中显示出来. 表达式的信息: .表达式 .类型 .当前的值,以指定格式显示. 如果类型前有个+号,则此类型可扩展.用鼠标双击或用ALT+W切进监视窗口,用光标移动到该类型上去,再按回车键. 如果要求的表达式当前无法计算,SoftICE会显示: "Error evaluating expression" 要删除某个监视的表达式,选中它,再按DEL键. 点评: 无   命令: WC 作用: 打开或关闭代码窗口;或改变代码窗口大小 语法: WC [window-size] 用法: window-size : 窗口大小,十进制值 WC 命令不加参数将打开或关闭代码窗口. WC 命令加参数将改变代码窗口的大小. 点评: 无   命令: WD 作用: 打开或关闭数据窗口;或改变数据窗口大小 语法: WD [window-size] 用法: window-size : 窗口大小,十进制值 WD 命令不加参数将打开或关闭数据窗口. WD 命令加参数将改变数据窗口的大小. 点评: 无   命令: WF 作用: 以浮点或MMx形式显示浮点栈 语法: WF [-d] [b │ w │ d │ f │ *] 用法: -d : 在命令窗口中显示结果,另外加上FPU状态字 和FPU控制字. b : 以字节形式显示 w : 以字形式显示 d : 意双字形式显示 f : 以10byte实数形式显示 * : 按顺序以下一种形式显示. 以10bytes的实数显示时,会标记有ST0-ST7 以别的形式显示会有 MM0-MM7 点评: 无   命令: WHAT 作用: 用来确定一个名字或表达式是否是已知类型 语法: WHAT [name │ expression] 用法: name :任何符号名(不能被解释成表达式) expression:任何表达式 WHAT 命令将分析它的参数,并和它已知的名字相比较,枚举每一个可能的匹配,显示出结果. 点评: 无 命令: WL 作用: 打开或关闭本地窗口;设置本地窗口的大小 语法: WL [window-size] 用法: window-size : 十进制的行数 WL 命令不加参数将使本地窗口在打开与关闭状态之间切换.WL 命令加参数将使本地窗口改变为指定大小.所谓本地窗口,也可称局部(变量)窗口, 它是从当前栈中取的. 点评: 无   命令: WMSG 作用: 显示Windows消息的名字和消息代码 语法: WMSG [partial-name│ msg-number] 用法: partial-name : Windows 消息名或消息名的前几个字符. msg-number : 十六进制数消息代码 WMSG 用来察看Windows消息名和消息代码.这个命令在和BMSG配合下断点时非常有用.WMSG不加参数将显示所有Windows消息的名字,如果加partial-name和msg-num参数,则只显示附和条件的消息. 点评: 无   命令: WR 作用: 打开或关闭寄存器窗口 语法: WR 用法: 如果当前寄存器窗口不可见, 那么WR命令将使之可见,反过来,WR命令将使寄存器窗口不可见.寄存器窗口显示80386寄存器集,CPU的FLAGS.该命令有快捷键 F2. 点评: 无   命令: WW 作用: 打开或关闭监视窗口;或改变监视窗口的大小 语法: WW [window-size] 用法: window-size : 十进制的窗口行数 WW 命令不加参数, 将使监视窗口在打开和关闭的状态之间切换WW命令加参数将使监视窗口改变为指定大小.另外 ALT+W键将使光标在监视窗口和命令窗口之间来回切换.参见 WATCH 点评: 无   命令: X 作用: 从SoftICE窗口中退出 语法: x 用法: X 命令将退出SoftICE,将控制交还给刚才被SoftICE中断的程序.SoftICE的窗口将消失,若有断点的话再弹出.用SoftICE呼叫热键(默认CTRL+D)或在窗口中键入G 命令所取得的效果和 X 的效果一样. 点评: 无   命令: XFRAME 作用: 显示当前的异常出错句柄框 语法: XFRAME [except-frame* │ thread-type] 用法: except-frame* : 指向异常出错框的指针 thread-type : 代表一个线程 异常出错框是由微软结构化异常出错处理API建立的. 点评: 无   命令: XG 作用: 在模拟(回溯)跟踪状态中运行程序到某一地址 语法: XG [r] address 用法: XG 命令意思是在模拟跟踪状态中的G命令.R 参数表示在回溯跟踪历史缓冲区中往回走. 点评: 无   命令: XP 作用: 在模拟跟踪模式中执行程序 语法: XP 用法: XP 命令在模拟跟踪模式中单步执行(P) 点评: 无   命令: XRSET 作用: 重置回溯跟踪历史缓冲区 语法: XRSET 用法: XRSET 必须用在非模拟跟踪模式中,用来清除历史缓冲区. 点评: 无   命令: XT 作用: 在模拟跟踪模式中单步跟踪程序 语法: XT 用法: XT 命令在模拟跟踪模式中单步跟踪程序,参数 R 表示反方向. XT和XP的区别参见P命令. 点评: 无   命令: ZAP 作用: 将内嵌的INT 1,INT 3清为NOP 语法: ZAP 用法: ZAP 命令在跟踪程序时将程序中的INT 1,INT 3指令换为相等数量的NOP,这在用户为了调试程序方便而在程序中加杂INT 1或INT 3指令,过后又不想要时特别有用.需注意:只有当INT 1,INT 3出现在当前CS:EIP的前一条指令位置处才有用. 点评: 无