|
SoftICE命令中文解说(一)
SoftICE for Win95是由NUMEGA公司出品的程序调试工具,它出色的性能深得用户的喜爱.但由于SoftICE的中文命令解释很少能够见得完全,所以我早有此想法,将其翻译成中文.把它纯粹当做一个好的DEBUGGER来看待,而不是一种秘密武器.
最早是在武汉的JINGLE BBS上准备写一些有关SoftICE的文章,一个命令算做一封信,以换取YY,好买级别.很天真的想法!现在看起来,很好笑,最后多亏CRACK区的蔡杰给了我很多很多YY,才让我那个极其幼稚的想法没有得到实现:)
后来建立了个人网页,为了充实网页内容,旧话重提,一篇一篇写下来,到现在也算基本完成了.所有的命令均翻译自NUMEGA出品的SoftICE ommand
Reference for SICE3.20,(PDF 格式,NUMEGA网站有下载)少数地方增删. (不包括新版的SoftICE所添加的命令.)(共计,intoice0~intoicef,16个文件,bg.gif,tr1.gif,tr2.gif,3个图片)
开头觉得好玩,写到一半的时侯变成一件苦差事了,好在有我亲爱的网友们给我的巨大的鼓励,让我没有放弃,在此一并感谢:
蔡杰,文岭,大兵,DingBoy,番外地,RuFeng吴朝相,SAC,梦晖,DBstar,dREAMtHEATER......
还有更多这里没有提到名字的朋友们!
其实我这个网页也是说明一个道理,这个时代,没有什么不是自由的!(你要说是"共享"的也可以!)
信息化的变革敲打着每家每户的门窗.人们的观念将随之产生翻天覆地的变化,那种小家气的作风,那种技术保守的时代,那种将教科书上的文章抄抄改头换面以换取稿费的日子将一去不复返.
我们需要一个更明亮的未来,如果前辈没有给我们,那么就让我们自己来创造吧!
末了,向所有的作者一样要加几句:
由于本人水平有限,错误之处难免,恳请来信指正!
我的邮箱:spring_w@263.net
SoftICE for WIN95中文命令解说(一)
命令: .
作用: 在代码窗口中定位当前指令
语法: .
用法:
当代码窗口可见时, .命令(点命令)使得当前的CS:EIP所指向的指令可见, 并且高亮显示. 另外,此命令也把SoftICE
从其他内存区域中切回原先弹出的内存区域.详见后面的ADDR命令.
点评:
当你在代码窗口中上下浏览时,有可能走得很远, 那么这时一个"." 命令会让你在下一瞬间回到SOFTICE当前所在的CS:EIP处,再也用不着按PGUP,PGDOWN很多次了!
命令: ?
作用: 计算一个表达式的值
语法: ? 表达式
用法:
计算一个表达式的值.并以十六进制,十进制,带符号的十进制(<0时有)和ASCII值多种形式显示计算结果.
点评:
一个非常高级的计算器, 诸如46578*1999+ESI 之类的计算不会再让你烦恼,另外由于可以显示ASCII,所以可以很方便地在各种数制之间察看.
命令: A
作用: 写入汇编代码
语法: A [地址]
用法:
用SICE内置的汇编器在内存中写入汇编代码.汇编器支持标准的80x86指令集.包括386,486,Pentium,Pentium-Pro,MMX,协处理器,新版的SICE还支持AMD的3D
Now!,PII,PIII的特有指令集.汇编将在A后的地址处开始.如果在A后没有加地址,
那么汇编将在你上次汇编结束处开始.如果你是第一次键入A命令,且没有追加地址那么汇编将在当前CS:EIP处开始.另外,键入A命令后,
在单独一行指令栏中键入USE16或USE32,将告诉汇编器是采用16位还是32位指令,默认是和当前的CS寄存器的模式一致.
点评:
这是和DOS下DEBUG.EXE的用法一样的命令.一般改程序时,用A命令写入,再用CODE
ON(见稍后)命令看代码,记录原来的代码和改过的代码后再用工具软件如PCTOOLSHACKVIEW之类查找修改.
命令: ADDR
作用: 在SoftICE中显示或是切换内存区域
语法: ADDR [内存区域句柄|过程名]
用法:
用来察看某一个任务的私有内存区域, 或是加参数[内存区域句柄|过程名]在SoftICE中切换某一任务的私有内存区域为当前可寻址的内存区域.
一些参数的显示:
.HANDLE 内存区域控制块的地址
.PGTPTR 每个任务私有页表的起址
.TABLES 每个私有页表中的表项数目
.MINADDR 每个任务的线性地址的起址
.MAXADDR 每个任务的线性地址的终址
.MUTEX VMM用于页表管理的句柄
.OWNER 使用这块内存区域的实例的名字
如果有多个相同名字的实例运行, ADDR带OWNER名字切换的话,切到表中的第一个有此NAME的实例所占的内存区域.所以带HANDLE切换的话比较精确.
当用ADDR加参数后,可以用上面提到过的"."命令来回到SoftICE弹出时所属的任务内存区域.
点评:
这个牵涉到CPU的保护模式寻址方式和WINDOWS
的内存管理,由分段机构产生的32位线性地址要经过分页机构再转化为物理地址,这要牵涉到两个表的寻址.WINDOWS每次切换都将每个任务的私有页表拷贝到CR3寄存器所指的当前页表中.而ADDR所作的和WINDOWS所作的一样.所以当你在一个任务中弹出时,可以通过ADDR可以来看别的任务的私有内存区域.
命令: ALTKEY
作用: 改变用来呼叫SoftICE的热键
语法: ALTKEY [ALT 字母 | CTRL 字母]
用法:
SoftICE默认的热键为CTRL+D, 用此命令可以将热键改变,如果每次启动机器都要改, 则可以把这条命令放入WINICE.DAT中.
这条命令是为了防止某些程序和SoftICE的热键相冲突而设的.如:ALTKEY CTRL S 将热键改为CTRL+S
点评: 无.
命令: ALTSCR
作用: 切换SoftICE的视屏输出.
语法: ALTSCR [ON|OFF]
用法:
如果你有双显示器, 则这条命令将使SoftICE的窗口显示在另一台单显上.注意,是老式的单显,不是VGA单显.实际上在启动WINICE时可用参数/M强迫SoftICE用单显来显示.也可在WINICE.DAT中加入初始化串.在WIN95中用SoftICE自带的VIDEOSETUP可以很方便地设定.例:ALTSCR
ON 将使输出改变到单显上.
点评:
这条命令将使SoftICE同一些老显卡兼容, 也使调试变得方便,试想一台显示器显示正常的图像, 另一台来显示跟踪屏幕,免去了按F4看原画面的步骤,
在某些场合还是用得上的. 以前的WDEB386调试器就非要双监视器才能工作.而SoftICE只要一台显示器就行了,这是个很大的进步,但为了和老传统兼容,
它也提供了这个命令方便用户.
命令: ANSWER
作用: 自动监控通讯端口及将输出转移到MODEM
语法: ANSWER [on [com-port] [baud-rate] [i=init] | off]
用法:
此命令可以使SoftICE监控通讯端口, 并将输出改变到一台远程的PC机上, 此远程PC机必须运行 SERIAL.EXE(或SERIAL32.EXE).当SoftICE检测到远程PC上SERIAL.EXE发来的特定信息,
就弹出, 告诉你现在将连上远程PC,然后再退出窗口,联接完成.
一些参数:
.COM-PORT 串行通讯口,默认为COM1
.BAUD-RATE 1200, 2400, 4800, 9600,19200,23040,
28800,38400,57000,115000
其中38400为默认波特率.
.I=INIT MODEM的初始化字符串.
点评: 无,没有用过,不知道:-(
SoftICE for WIN95中文命令解说(二)
命令: BC
作用: 清除一个或多个断点
语法: BC list | *
用法:
清除断点后,用BL命令就看不到断点列表, 且被清除的断点不再起作用.
参数:
list: 可以是将要清除的一系列断点,中间用空格或逗
号隔开.
* : 清除所有的断点.
点评: BC==Breakpoint Clearing
命令: BD
作用: 使一个或多个断点失效
语法: BD list | *
用法:
使某个断点失效不同与 BC 命令的清除,暂时失效的断点可以用 BE 命令来恢复.而 BC 命令是彻底清除.
参数:
list: 可以是单个,也可以是一系列断点, 中间用空格或逗号隔开.
* : 禁止所有的断点.
点评: BD==Breakpoint Disablling
命令: BE
作用: 使一个或多个断点恢复有效
语法: BE list | *
用法:
用来恢复前次用 BD 命令使之失效的断点. (每当新定义断点或编辑断点时,系统自动将其置为有效)
参数:
list: 可以是单个,也可以是一系列断点, 中间用空格或逗号隔开.
* : 恢复所有的断点.
点评: BE==Breakpoint enablling
命令: BH
作用: 在SoftICE历史数据库中显示或是选择曾经设过的断点
语法: BH
用法:
用BH命令后,SoftICE将显示一个表,每一行是一个断点,都是以前使用者曾经下过的断点,
这时可以用上下光标键来定位,用INSERT键选择,再用ENTER键来确定. 用ESC键取消.SoftICE只记录最近的32个断点.
而且只在WIN95正常退出后记录(记录到WINICE.BRK中), 这样就有一个问题.如果你在MSDOS.SYS配置中是BootGUI=1的话(即最正常的启动方式),当你SHUT
DOWN机器时,控制并不回到SoftICE手中,就无法记录刚才的断点.这时只有改为BootGUI=0.
点评:
注意:SoftICE只在SHUT
DOWN时记录,如果你用"重新启动并切换...",那是不行的.至少在我的V3.20是不行的.而且,如果你"重新启动并切换...",
再用EXIT命令想退回到WIN95,很容易出现VxD联接错.因为这样 WINICE并没有完全退出内存,用 MEM.EXE可以看到这点.所以,SoftICE的使用者最好在MSDOS.SYS中将上面所说的Boo-tGUI置为0.如果怕这样用多重配置的话还要每次开机敲一个WIN,可以在AUTOEXEC.BAT中改动,加入WIN.COM.(可不要在WINICE.EXE后再加WIN.COM!画蛇添足!)若用SoftICE次数不多的话,
可以每次启动WINDOWS后,再重新启动并切换到MS-DOS方式,再打WINICE.EXE, 这样也可以的. BH的好处是,可以省去纸笔,
下次重调试这个程序时,不用再挖空心思想断点了.
命令: BL
作用: 显示当前所设的断点
语法: BL
用法:
BL 命令显示当前所有断点的序号 (这个序号被BC BEBD
等命令所用),类型,是否被禁止等信息.如果是被禁止的断点,会在序号后跟一个"*"号.比如用上面提到的BD 命令会产生这种效果)
点评: BL==Breakpoint listing
命令: BMSG
作用: 在WIN95的消息上下断点
语法: BMSG window-handle [L] [begin-msg [end-msg ]]
[IF expression][DO "command1;command2;..."]
用法:
window-handle: 消息发向的窗口句柄
begin-msg : 消息标识字的范围,如果没有end-msg
,那么只在begin-msg上下断点, 否则在区域内所有消息都会被下断点end-msg : 见上.
IF-expression: 表达式的值为真时,SoftICE才弹出.DO "command1;command2;...":
当到达断点时,执行的一系列SoftICE命令.
L : 表示不弹出SoftICE,而是在命令窗口
中记录WIN95消息.
上面只有窗口句柄是必需的,其他都是可选项. 如果没有指定在哪个MSG上下断点, 那么所有发向该窗口的消息都会被拦截.窗口句柄可以用HWND命令来观看,MSG标识符可以用
WMSG 命令来察看,可以是16进制的数, 也可以用习惯的书写方式,如:WM_CREATE.SoftICE弹出后,会停在处理该消息的过程的第一句代码上.
点评:
BMSG=(set)Breakpoint on MeSsaGe
WINDOWS本身是由消息驱动的, 所以跟踪一个消息会得到相当底层的答案,我主页上一篇"修改RICHWIN4.3"的文章就是一个例子.
命令: BPE
作用: 编辑一个已存在的断点.
语法: BPE index_number
用法:
index_number: 断点的序号,用 BL 命令可以看到.用BPE命令可以很方便地修改一个已经存在的断点, 但要注意一点: BPE
在执行时,会先将你所要修改的断点清除,然后再将改过的使能,如果你在修改时按ESC键退出修改,那么原先的断点也就不存在了,
修改错误的结果也是一样的.原先的断点消失.
点评: 参见后面的 BPT 命令.
SoftICE for WIN95中文命令解说(三)
命令: BPINT
作用: 在某个中断向量上下断点
语法: BPINT int-number [IF expression]
[DO "command1;command2;..."]
用法:
int-number : 中断向量号,从0到FFH
IF expression: 条件表达式,只有条件为"真"时,Sof-
tICE才在断点处弹出
Do command : 当SICE弹出时,自动执行的一些命令.当在硬中断和CPU异常出错的向量上下断点时,SoftICE会在处理这个中断的过程的第一条语句时弹出.而软件中断则停在INT
XX处.注意:BPINT只对由中断描述符表中的中断起作用(WIN95).如果在一个DOS虚拟机(DOS窗口)中下此种断点,
控制是由保护模式转到虚拟机的中断向量表中去.这时如果说停在INT XXH 处, 你用F8跟下去,是一下子看不到对这个中断的实模式处理过程的
,要走很远,这时可用:G @ $ 0:int-number*4 来一下子走到实模式处的处理过程.
点评:
注意! SoftICE30的命令手册(英文版PDF格式在此处写错了!把$写成&了!)($意思是告诉SoftICE
后跟实模式的段.以后有专门论及这些符号的文章.) 如果你是在DOS窗口中用命令行调一个东西, 这时 G @
0:intno*4也可以,这时默认的SELECTOR就是实模式,选择符存在.
但如果在EXPLORER中直接双击一个程序, 拿INT 21H来说,一开头是在KERNEL中,就非得用 $ 不行了!另外:由于有了IF
子句,可以很方便地下各种INT XX断点,比如在文件打开中断功能上下断点 bpint 21 if ah==3d
命令: BPIO
作用: 在输入输出端口上下断点
语法: BPIO [-h] port [verb] [IF expression]
[DO "command1;command2;..."]
用法:
port : 端口号
verb : 进行什么样的操作时弹出,R为读;W为写 ;RW为读写
IF expression: 条件表达式,只有条件为"真"时,Sof-tICE才在断点处弹出Do command : 当SICE弹出时,自动执行的一些命令.
-h : 用硬件除错寄存器在VxD中下断点,只在PENTIUM级的芯片上才行当SoftICE弹出时,CS:EIP停在执行I/O操作的下一条指令处.如果不带参数
verb,默认为RW.注意:在WIN95中,若不带-h参数,则只能在RING 3中下断, 若要跟 VXD和VMM的I/O操作,请加-h.WIN95本身用VXD挂了很多I/O操作,用TSS可以看到
点评: 可以参看后面要讲的TSS命令.
命令: BPM
作用: 在内存单元上下断点
语法: BPM[size] address [verb] [debug-reg] [IF expression]
[DO "command1;command2;..."]
用法:
size : 内存单元大小,B 为字节(默认);W 为字;D 为双字.
verb : 所进行的操作,R 为读;W为写;RW为读写(默认); X 为执行.
debug-reg : 除错寄存器,DR0,DR1,DR2,DR3.
IF expression: 条件表达式,只有条件为"真"时,Sof-tICE才在断点处弹出.
Do command : 当SICE弹出时,自动执行的一些命令.
当verb 为 R,W,RW时,一旦弹出,SoftICE停在刚才发生内存操作的后一条指令处.为 X 时,停在将要执行的指令处.一般没有必要,不要带
debug-reg 参数,SoftICE一开始是自动带DR3的,以后按顺序为2,1,0 只有当你调试一个DEBUGGER时,而此DEBUGGER也用到了DRx,才需特别指定一个防止冲突.BPM断点如果下在(400000-7FFFFFFF)内,那么只有你下断点时当前的可寻址区域(
见ADDR的点评)被激活才能发生中断.别的不行.但如果断点下在DLL中,这个DLL在多个地址区域内都存在,那么在这多个地址区域内都可能发生中断,简单的例子如KERNEL32.DLL另外,size
参数要紧跟BPM写,成BPMD,BPMW之类.
点评: BPM用了DR3-DR0寄存器,所以最多只能设四个断点.
命令: BPR
作用: 在一个内存范围上下断点
语法: BPR start-address end-address [verb] [IF expression]
[DO "command1;command2;..."]
用法:
start-address: 起始地址
end-address : 终止地址
verb : R 读;W 写;RW 读写;T 回溯跟踪指令;TW 回溯跟踪内存写
IF expression: 条件表达式,只有条件为"真"时,Sof-tICE才在断点处弹出
Do command : 当SICE弹出时,自动执行的一些命令.
BPR 用来在一段内存区域上下断点它没有 X 参数, 但可用 R 参数代替. T,TW是记录回溯跟踪的参数, 具体可见TRACE命令.BPR
有时会极大地降低系统效能,因为所有对断点所在页的内存操作都会被SoftICE截获分析.如果程序中用到频繁的内存操作,机器就会相当慢.当条件满足,SoftICE弹出时,CS:EIP停在发生内存操作的那条指令上.
BPR 断点是下在当前被激活的页表上,如果你下的RANGE在物理4MB以下,断点就会在各虚拟机中,这样,BPR就对LDT,GDT,IDTs,页表本身不起作用.另外,VMM中0级堆栈和严重(?)内存区域(critical
ar-eas)也不允许下BPR,很有可能死机.在95中,BPR只能用于RING 3,所以对RING 0的VXD无用.(v3.20)
点评:
BPR 有时真的很慢,机器就象死了一样, 原因上面都说了.所以在知道内存单元的时侯最好用BPM,只有无路可走才用BPR的范围来试试.(当然也有非要用BPR
不可的地方)
命令: BPRW
作用: 在某个WINDOWS程序或代码段所在的内存区域上下范围断点
语法: BPRW module-name | selector [verb] [IF expression]
[DO "command1;command2;..."]
用法:
module-name : WINDOWS程序的模块名
selector : 选择符
verb : R 读;W 写;RW 读写;T 回溯跟踪指令;TW 回溯跟踪内存写
IF expression: 条件表达式,只有条件为"真"时,Sof-tICE才在断点处弹出
Do command : 当SICE弹出时,自动执行的一些命令.
BPRW是个在WIN程序的一个或多个可执行模块上下断点的比较便捷的方法实际上它就是BPR, 不信你可以下一个,再用BL 看看.它只不过比BPR更有目的性.用HEAP命令可以帮助使用者看module-name和selector.BPRW
不用你再费心找范围.BPRW 在回溯跟踪时很有用.另外,BPRW 也是不能用于RING 0. 而且在跟 T 参数或和CSIP命令配合使用时有可能会很慢.RW参数是缺省值
点评:
BPRW 有时侯很管用的, 因为你有可能不知道某个程序在何时在内存中参与运行,用BPRW就可以在这个程序一运行时就弹出.而且可以分不同的代码段.
命令: BPT
作用: 以前次的断点为模板,设定新的断点.
语法: BPT breakpoint_index
用法:
breakpoint_index: 断点序号.(用BL可以看到)
BPT 是以前次的断点为蓝本,进行修改,成为新的断点.它为使用者定新的断点提供了方便.
点评: 参见第二部分的BPE 命令
命令: BPX
作用: 在可执行语句上设定(或清除)断点
语法: BPX [address] [IF expression] [DO "command1;command2;..."]
用法:
address : 断点所在的线性地址
IF expression: 条件表达式,只有条件为"真"时,SoftICE才在断点处弹出.
Do command : 当SICE弹出时,自动执行的一些命令.
BPX 用来在指令处下断点,程序一旦执行到此,SoftICE就会弹出.当光标在代码窗口中时,直接打入BPX就会在光标所在语句处设断点,再打BPX 就取消.
当光标不在代码窗口中时,BPX 必须跟参数(地址). 地址为标准的"选择符:偏移",如果只输入偏移,当前的CS值默认为选择符.
BPX 实际上是在你下的断点处加一个INT 3指令,
到这条指令时就弹出来.这使得可以在一个程序中下多个断点,而不必要使用少得可怜的寄存器.但当你在ROM中设断点时,SoftICE自动用断点寄存器来设断.你也可以用BPM
命令的X参数来强迫SoftICE用断点寄存器(DRx)来设断.
BPX 也可用16位代码的模块名来作地址参数, 这样,模块中每个出口函数都被设了断点. BPX 最多设256个断点.(V3.20) BPX 有个快捷键
F9,当光标在代码窗口中时,按F9就是设定(取消).
点评:
BPX 可能是用得最多的断点了. 有些ANTI-DEBUGGER的程序就利用INT 3 来作文章,看了上面的东西我想你可以闪过了吧!(不包括用DRx做文章的噢!)
命令: BSTAT
作用: 显示某个断点的状态
语法: BSTAT [breakpoint-index]
用法:
breakpoint-index :断点的序号,用BL 命令可以看到用BSTAT 来显示某个断点的状态,各种统计参数.
BP # : 断点的序号.若前面有 "*" ,表示断点被禁止在Total 栏目中:
Hits : SoftICE每经过一次断点,计数+1
Breaks: 在IF expression子句为真的情况下,SoftICE就会产生动作,要么弹出,要么记录在内存中,不管怎样,计数+1
Popups: 在Breaks中SoftICE弹出的次数
Logged: 在Breaks中SICE将情况记录到内存中的次数
Misses: 在IF expression子句为False的情况下,SICE虽然经过这个断点但没有弹出行动的次数Errors: 由于IF
子句中内存变量的问题或其他原因产生的错误的次数.比如跟一个C写的程序,用变量"IF mysymbol==1"来设断,而在断点处 my-symbol
这个变量所在的内存由于释放或其他
操作而无法访问,就会产生Error.
在Current 栏目中:
Hits : 当前的在IF子句计算为True的情况下,但由于BPCOUNT宏所定的次数未到而记录下的累计数
Misses: 当前在IF子句计算为False的情况下, 且(或)BPCOUNT宏所定的次数未到而记录下的累计数在杂项(misc)栏目中:
Status: SoftICE内部对最近一次断点进行计算的状态代码.(错误代码)如果为0 的话,表示没有错.
Scode : SoftICE最近一个内部状态代码,如果为0的话表示没有Errors.
Cond. : 如果断点带有附加判断(即有IF expression),则为Yes,否则为No
Action: 如果断点带有附加的动作(即有DO command),则为Yes,否则为No
命令: C
作用: 比较内存中两块区域的内容
语法: C start-address l length start-address-2
用法:
start-address : 第一块内存区域的开始地址
length : 字节长度
start-address-2: 第二块内存区域的开始地址
如果比较结果不同,将显示不同的部分和它们的地址
点评: 无
命令: CLASS
作用: 显示WINDOWS的类的信息
语法: CLASS [-x][task-name]
用法:
task-name: 当前的正在机器中运行的16或32位任务名-x : 显示CLASS(类)的完整结构.
Windows 95在一个16位的模块中维护着标准的WINDOWS类.而且,它为每个进程分别维护着除标准类以外的类.
每当程序注册一个新的WINDOWS类时, 信息被放入以下两个地方中的一个:
1.任务全局列表放该进程所有模块都可以存取的类(用CS_GLOBAL风格)
2.任务私有列表放只有申请该类的模块才能存取的类.
当任何一个进程想做一个WINDOWS标准类的话,如LIST-BOX,它会在任务特定的系统冗余列表中得到一个拷贝,这样就不会影响到WINDOWS本身.
所以,当用CLASS命令时,可以看到以下3个分类:(用虚线隔开)
.任务私有列表
.任务全局列表
.系统冗余列表
输出的各项参数:
Class Handle : 类句柄.
Class Name : 类的名字, 如果注册时没有名字,那么显示原子名
Owner : 注册此类的模块
Window Procedure: 处理该类的过程
Style : 类的风格
点评: 无
命令: CLS
作用: 清除命令窗口中的字符
语法: CLS
用法:
CLS 清屏命令,将清除命令窗口中显示的数据, 并定位光标到命令窗口的左上角. (如果光标原先就在命令窗口中的话)
点评: 无
命令: CODE
作用: 显示指令码
语法: CODE [ON | OFF]
用法:
CODE ON 将显示指令的机器码
CODE OFF 将不显示指令的机器码
CODE 不带参数将显示当前是ON 还是 OFF
点评:
非常有用的,由于安装SoftICE时默认为CODE OFF,所以有必要打开,看到了机器码就可以记录下来,以便修改.
命令: COLOR
作用: 显示或修改屏幕颜色
语法: COLOR [normal bold reverse help line]
用法:
normal : 普通字符的前/背景颜色,默认为07h(灰/黑)
bold : 粗体字符的前/背景颜色,默认为0Fh(白/黑)
reverse: 反象显示的字符的前/背景颜色, 默认为71h
(蓝/灰)
help : HELP命令提示条的前/背景颜色, 默认为30h
(黑/青)
line : SoftICE各个窗口分界线的前/背景颜色, 默
认为02(绿/黑)
这些参数采用CGA的标准格式,即0-3位为前景色,4-6位为背景色,这样就有16种前景色,8种背景色:
0 黑; 1 蓝; 2 绿; 3 青; 4 红; 5 品红;
6 棕; 7 灰; 8 深灰; 9 浅蓝; A 浅绿;
B 淡青; C 浅红; D 淡品红; E 黄; F 白
点评: 默认的颜色已经很好了,不要改得乱七八糟噢!
命令: CPU
作用: 显示寄存器内容
语法: CPU [-i]
用法:
CPU 命令显示所有的CPU 寄存器的内容.
(普通,控制,除错,段)
点评: 不用再装其他检测CPU的小软件了:)
命令: CSIP (16位程序才有用)
作用: 为所有断点设定一个界限(CS:EIP在其内)(16位程序)
语法: CSIP [off | [not] start-address end-address | Windows-module-name]
用法:
off : 关闭CS:EIP的界限检查
not : 在所定义的模块之外的区域断
点才有效
start-address : 内存区域起始地址
end-address : 内存区域结束地址
Window-module-name : 用 WINDOWS模块所在区域来代替地址界限.
CSIP 不带参数将显示当前状态.
对于32位程序,这个命令没有用.请用带IF 参数的断点命令代替.当然WIN95下也有一些老的16位程序(16位模块,这时CSIP就能派上用场.
点评: 无
命令: D
作用: 显示某内存区域的内容
语法: D[size] [address [l length]]
用法:
size: B 字节; W 字; D 双字; S 短实型; L 长实型;T 10b长实型
D 命令在所指定的内存区域开始显示指定长度的内存单元内容. 格式将根据size来变.对于双字类型, 将分两种情况:
1.如果指定地址为32位的段, 格式为32bytes的16进制值(即8位16进制值)
2.如果指定地址为16位的段, 则格式为16:16指针的形式(即4:4位16进制值)
如果没有指定地址,D 命令将继上次命令后的地址开始显示.如果数据窗口可见,则结果在数据窗口中显示,否则显示在命令窗口中.但若用了参数L 和长度,
则结果不论数据窗口可见还是不可见,都显示在命令窗口中.
|