SOFT-ICE命令详解(2) F-O 命令 F 作用 填充某一块内存区域语法 F
- 格式:rtf
- 大小:284.01 KB
- 文档页数:14
lsof -f的用法lsof是一个非常实用的命令行工具,用于查看系统中打开文件的信息。
它可以显示出哪些进程打开了哪些文件,包括普通文件、设备文件、目录、套接字、管道等等。
通过使用lsof命令,我们可以更好地了解系统中的进程与文件之间的关系,从而进行有效的系统监控和故障排查。
首先,让我们一步一步来了解和学习如何使用lsof命令。
第一步:安装lsof命令在大多数Linux发行版中,lsof命令已经预装。
你可以通过在终端中输入"lsof"命令,来检查系统中是否已经安装了lsof。
如果没有安装,你可以通过包管理器来安装它。
例如,在Debian或Ubuntu中,你可以使用以下命令来安装lsof:sudo apt-get install lsof第二步:基本用法lsof命令的基本用法非常简单。
在终端中输入"lsof"命令,然后按下回车键即可。
这将列出系统中所有打开文件的相关信息,包括进程ID、进程名称、文件类型、文件描述符、文件名等等。
lsof第三步:过滤结果由于lsof命令会输出系统中的所有打开文件信息,因此结果可能非常庞大。
为了更好地过滤结果,我们可以使用一些选项来指定特定的条件。
以下是一些常用的选项:- `-p`:通过进程ID过滤结果。
例如,如果你只想查看进程ID为123的进程打开的文件,可以使用以下命令:lsof -p 123- `-u`:通过用户名过滤结果。
例如,如果你只想查看用户名为"john"的用户打开的文件,可以使用以下命令:lsof -u john- `-c`:通过进程名过滤结果。
例如,如果你只想查看进程名为"nginx"的进程打开的文件,可以使用以下命令:lsof -c nginx- `-t`:只显示进程ID,而不显示其他详细信息。
例如,如果你只想查看打开文件的进程ID,可以使用以下命令:lsof -t此外,你还可以结合使用多个选项来实现更复杂的结果过滤。
SoftICE for WIN95中文命令解说(九)命令: M作用: 传送数据语法: M source-address l length dest-address用法: source-address: 源数据的起址; length : 要传送的字节长度;dest-address : 目的数据块的起址.用 M 命令将数据块从源地址传送到目的地址.如M ds:1000 l 2000 es:5000将2000h个字节从DS:1000h传到ES:5000h处.点评: 无命令: MACRO作用: 定义一个宏命令,使之执行一系列SoftICE指令.语法: MACRO [ macro-name] | [*] | [= "macro body"]用法: macro-name: 3-8个字符的宏名,(不区分大小写);macro-body: 用分号隔开的一系列SoftICE指令, 首末加冒号;* : 删除一个或所有的已定义的宏命令;= : 定义(或重定义)一个宏命令.MACRO 命令用于定义SoftICE指令的超集.macro-body可以包含SoftICE的指令,也可包含宏定义,甚至是当前的宏定义本身.(这当然会产生递归调用,如果编得不好的话会产生错误,也没有什么大意思).在这一系列命令之间用分号(;)隔开,最后一个命令后不用加分号.macro-body中还可以带入命令行参数,和DOS命令的%1,%2...一样,合法值在1-8之间.注意一点,macro-body首尾是用冒号的.所以在宏定义体中如果要用到 \, ", %时要在前加一 \,这跟C语言的写法是一致的.macro_name参数用来代表宏名,可以是字母或数字或下划线组成.可以是现有的宏名, 那样的话就会重定义这个宏.宏名不可以和现有的SoftICE内部指令相同.会发生错误.MACRO * 表示删除当前定义的所有(有名字的)宏.(因为断点的DO 子句实际上也是宏, 不过是无名字的,它们不能就这样被删除了!)MACRO mnames * 删除当前名为mnames 的宏.MACRO mnames 将编辑名为mnames的宏, 在编辑过程中可以用ESC键取消改动.一个很有用的例子::MACRO 1shot = "bpx %1 do \"bcbpindex\""用这个宏可以设一个一次性断点,非常方便!点评: 宏病毒!命令: MAP32作用: 显示当前所有32位模块的内存映象(图).语法: MAP32 [module-name | module-handle |address]用法: module name : Windows模块名; module handle: 模块的基址; address : 落在可执行模块中的地址.MAP32 不带参数将显示所有的32位模块的信息.加参数将只显示指定模块的信息.输出如下:Owner : 模块名.OBJ Name: 可执行文件的区段名.Obj# : 可执行文件中的区段号.Address : 选择符:偏移量格式的区段地址.Size : 区段的大小(字节)Type : 区段类型:--------------------CODE 代码IDATA 初始化的数据UDATA 未初始化的数据RO 只读RW 读/写SHARED 对象是共享的.--------------------点评: 无.命令: MAPV86作用: 显示当前虚拟机的DOS内存映象语法: MAPV86 [address]用法: address : 段:偏移量格式的地址MAPV86 不带参数将显示当前整个虚拟机的内存映象.加参数将显示指定包含所指定地址的内存区域的信息.有时侯DOS VM的页没有切进来,所以会有 "PAGE NOTPRESENT"的出错信息,所以可以再弹出一次.MAPV86 在配合SYMLOC命令时很有用,因为在Windows启动前装载的程序,Windows不会自动将它们的符号信息映射到V86内存,用MAPV86命令就可以取得它们的代码段,将符号表与之对齐,就可以跟踪调试了.输出如下:VM ID : 虚拟机的ID.VM handle : 32位虚拟机的句柄.CRS pointer: 虚拟机的32位客户登记表的指针.(?)VM address : 32位线性地址.另外,如果SoftICE弹出时CS:IP指向一个MAPV86的入口,那一行的内容将高亮显示.点评: 无.命令: MOD作用: 显示Windows模块列表.语法: MOD [partial-name]用法: partial-name: Windows模块名,(可以是开头的若干个字母).MOD 不带参数将显示所有的模块.若加 partial-name,则符合要求的模块将被列出.输出如下:module handle: 16位的句柄.base : 线性基址.pe-header : 选择符:偏移量格式的PE文件头.module name : 模块名.(编程序时在.DEF中用NAME或LIBRARY命名的.) file name : 文件的路径(全名).点评: 无.命令: O作用: 向I/O端口输出数据. 语法: O[size] port value用法: size : B 字节(缺省值);W 字;D 双字port : 端口地址.value: 要输出字节,字,或双字.O 命令将立即输出到硬件端口(当然那两个21h和A1h要等退出SoftICE窗口时才执行)(?)点评: 关于21h和A1端口,二者是关系到中断的, PDF文档在这写得不是很详细.实际操作情况是多种多样的.命令: 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可能是按得最多的键了,好好保护你的键盘吧!。
lsof -f的用法-回复lsof(list open files)是一个强大的命令行工具,用于显示当前系统中打开文件的相关信息。
通过lsof命令,我们可以查看进程使用的文件、网络连接、设备以及文件系统等信息,帮助我们分析和排查系统运行时的问题。
本文将介绍lsof命令的基本用法,并对其功能进行逐步解析,以帮助读者了解如何使用lsof命令来查找和监视文件打开情况。
首先,我们需要理解lsof的基本命令格式。
lsof命令的基本语法如下所示:lsof [选项]lsof命令支持多种选项,用于指定显示的内容和过滤条件。
下面我们将逐个介绍常用的选项及其用法。
1. -p:指定查看某一特定进程ID(PID)的打开文件情况。
例如,要查看进程ID为1234的进程的打开文件,可以使用以下命令:lsof -p 12342. -c:指定查看某一特定命令或程序名称的打开文件情况。
例如,要查看所有以"nginx"开头的进程的打开文件,可以使用以下命令:lsof -c nginx3. -u:指定查看某一特定用户的打开文件情况。
例如,要查看用户名为"john"的用户的打开文件,可以使用以下命令:lsof -u john4. -i:指定查看某一特定网络端口的打开文件情况。
例如,要查看所有使用80端口的网络连接,可以使用以下命令:lsof -i :805. -t:只显示打开文件对应的进程ID。
例如,要只显示打开文件的进程ID,可以使用以下命令:lsof -t6. -F:指定输出格式。
lsof支持多种输出格式,默认输出格式为文本。
例如,要以NULL分隔符(\0)的形式输出结果,可以使用以下命令:lsof -F n除了上述常用的选项,lsof还支持各种其他选项,用于更详细和精确地进行信息过滤和查找。
使用lsof命令的第一步是了解当前系统中的打开文件。
可以使用lsof命令不带任何选项直接运行,例如:lsof运行上述命令后,lsof将会列出当前系统中所有的打开文件。
单片机技术试题,保留填空、简答、计算部分(用法:如果教材上没有的内容,尽管在此出现,你不看就行了)《单片机原理及应用》试题库一、填空题(单片机考试过关方法见本文最后)1、MCS-51有5 个中断源,有2 个中断优先级,优先级由软件填写特殊功能寄存器IP加以选择。
2、MOV PSW,#10H是将MCS-51的工作寄存器置为第2区。
3、用串口扩并口时,串行接口工作方式应选为方式0。
4、寄存器PC复位后为0000H。
5、PSW中RS1RS0=10时,R2的地址为12H。
PSW中RS1RS0=11时,R7的地址为1FH。
6、MCS-51中,T0中断服务程序入口地址为000BH。
7、80C51中断有2个优先级。
8、80C51中断嵌套最多级。
(我:找不到答案,从道理上分析,只有两级)9、MCS-51单片机访问片外存贮器时,利用ALE信号锁存来自P0口的低8位地址信号。
10、12根地址线可选4K个存储单元,32KB存储单元需要15根地址线。
11、三态缓冲寄存器输出端的“三态”是指高电平态、低电平态和高阻态。
12、74LS138是具有3个输入的译码器芯片,其输出作为片选信号时,最多可以选中8块芯片。
13、A/D转换器的作用是将模拟量转为数字量,D/A转换器的作用是将数字量转为模拟量。
14、单片机系统复位后,PSW=00H,因此片内RAM寄存区的当前寄存器是第0组,8个寄存器的地址为00H~07H。
15、假定SP=60H,ACC=30H,B=70H,执行下列指令:PUSH ACCPUSH B后,SP的内容为62H,61H单元的内容为30H,62H单元的内容为70H。
(请软件中验证) 16、假定SP=62H,(61H)=30H,(62H)=70H,执行下列指令:POP DPHPOP DPL后,DPTR的内容为7030H,SP的内容为60H。
17、单片机的数据通信方式有二种,即串行方式和并行方式,其中串行方式传输距离较远,成本较低。
SoftICE for WIN95中文命令解说(十三) 命令: 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 :线程IDtask-name :当前运行的32位过程.THREAD 命令将显示某个线程的信息.如果不带任何参数,将显示当前系统中所有活动的线程如果将某个进程名作为参数,将显示所有该进程的线程如果指定TCB或ID,则只显示指定的线程.Ring0TCB :Ring-0线程控制块的地址.ID :VMM线程IDContext :该线程所属进程的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, EIPESI, EDI, EBP, ESP, EFLAGSLevel 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没有初始化时弹出.点评: 无.。
一、填空题1. 在Linux系统中,以____文件__________方式访问设备。
2. Linux内核引导时,从文件_etc/fstab_____________ 中读取要加载的文件系统。
3. Linux文件系统中每个文件用___i节点___________ 来标识。
4. 全部磁盘块由四个部分组成,分别为__引导块、专用块、i节点表块和数据存储块____________5. 链接分为:硬链接和符号链接______________。
6. 超级块包含了____i节点表__________ 和__空闲块表____________ 等重要的文件系统信息。
7. 某文件的权限为:drw-r--r--,用数值形式表示该权限,则该八进制数为:____644__________ ,该文件属性是_____目录_________ 。
8. 前台起动的进程使用____Ctrl+C_________ 终止。
9. 静态路由设定后,若网络拓扑结构发生变化,需由___系统管理员___________修改路由的设置。
10. 网络管理的重要任务是:___控制和监控___________ 。
11. 安装Linux系统对硬盘分区时,必须有两种分区类型:___文件系统分区___________ 和_____交换分区________ 。
13. 编写的Shell程序运行前必须赋予该脚本文件_____执行_________ 权限。
14. 系统管理的任务之一是能够在__分布式____________ 环境中实现对程序和数据的安全保护、备份、恢复和更新。
15. 系统交换分区是作为系统__虚拟存储器____________ 的一块区域。
16. 内核分为_____进程管理系统_________ 、_内存管理系统_____________ 、__I/O管理系统____________和__文件管理系统____________等四个子系统。
17. 内核配置是系统管理员在改变系统配置___硬件___________ 时要进行的重要操作。
1. 简述操作系统的定义,并指出操作系统的功能主要有哪些?答:操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。
操作系统的主要功能:(1)硬件控制;(2)资源管理;(3)提供用户接口;(4)提供输入输出处理;(5)系统监控;(6)实现计算机间的通信。
注:不局限于以上几点。
2. Linux操作系统何时出现?由谁开发出来?并列出Linux操作系统的主要特点。
答:1991年,由芬兰赫尔辛基大学学生Linus Torvalds开发出来。
Linux操作系统主要特点有:(1)与UNIX兼容;(2)自由软件和源码公开;(3)性能高和安全性强;(4)便于定制和再开发;(5)互操作性高;(6)全面的多任务和真正的32位操作系统。
注:不局限于以上6个。
、3. 解释Linux操作系统核心版本和发行版本的含义。
Linux 2.4.1版和2.5.1版中,哪一个版本更稳定?为什么?答:核心版本主要是Linux的内核。
发型版本是各个公司推出的版本。
2.4.1版本更稳定。
2.5.1版本是在是测试版本,不一定稳定。
(具体建p8核心版本的版本约定)4. Linux操作系统的超级用户是什么?超级用户登陆shell默认的提示符是什么?红旗Linux默认的shell类型是哪一种?答:Linux操作系统的超级用户是root,超级用户登录默认提示符是“#”,红旗Linux 默认的shell类型是bash。
1. 简述Linux命令的一般格式。
答:Linux命令的一般格式是:命令+[选项]+[参数],其中选项和参数是可选项,不同命令有区别。
有些命令是不带参数,有些命令必须带参数。
2. 请说明以下命令的功能:date,cd,cp,pwd,rm,mkdir,echo,who,ls,cat,more,man答:date命令:显示当天日期;cd命令:切换目录;cp命令:复制文件;pwd命令:显示当前用户工作目录;rm命令:删除文件;mkdir命令:建立目录;echo命令:将参数表示的内容显示在屏幕上;who命令:显示哪些用户在使用系统;ls命令:列出某个目录下的文件;cat命令:显示参数表示文件的内容;more命令:显示文件内容;man命令:帮助命令,可以查看所有Linux命令的帮助信息。
SoftICE for WIN95中文命令解说(十)命令: 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 PrivateInstance RelockVM 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就可以代替,非常好的,我推荐您试一下!!!!。
SoftICE for WIN95中文命令解说(十二)命令: 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正相反.点评: 无.。
有关SoftICE的详细操作指导教程时间:2009-08-19 14:05来源:未知作者:编辑 B 点击:2538次一命令: . 作用: 在代码窗口中定位当前指令语法: . 用法: 当代码窗口可见时, . 命令(点命令)使得当前的CS:EIP所指向的指令可见, 并且高亮显示. 另外,此命令也把SoftICE 从其他内存区域中切回原先弹出的内存区域.详见后面的ADDR命令. 点评: 当你在代码窗口一命令: .作用: 在代码窗口中定位当前指令语法: .用法: 当代码窗口可见时, .命令(点命令)使得当前的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(见稍后)命令看代码,记录原来的代码和改过的代码后再用工具软件如PCTOOLS HACKVIEW之类查找修改.命令: 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的详细操作指导教程(2)时间:2009-08-19 14:05来源:未知作者:编辑 B 点击:2539次二命令: BC 作用: 清除一个或多个断点语法: BC list | * 用法: 清除断点后,用BL命令就看不到断点列表, 且被清除的断点不再起作用.参数:list: 可以是将要清除的一系列断点,中间用空格或逗号隔开.* : 清除所有的断二命令: 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中改动,加入. (可不要在WINICE.EXE后再加!画蛇添足!)若用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 MeSsaGeWINDOWS本身是由消息驱动的, 所以跟踪一个消息会得到相当底层的答案,我主页上一篇"修改RICHWIN4.3"的文章就是一个例子.命令: BPE作用: 编辑一个已存在的断点.语法: BPE index_number用法:index_number: 断点的序号,用 BL 命令可以看到.用BPE命令可以很方便地修改一个已经存在的断点, 但要注意一点: BPE 在执行时,会先将你所要修改的断点清除,然后再将改过的使能,如果你在修改时按ESC键退出修改,那么原先的断点也就不存在了, 修改错误的结果也是一样的.原先的断点消失.点评: 参见后面的 BPT 命令.有关SoftICE的详细操作指导教程(3)时间:2009-08-19 14:05来源:未知作者:编辑 B 点击:2540次三命令: BPINT 作用: 在某个中断向量上下断点语法: BPINT int-number [IF expression] [DO command1;command2;...] 用法: int-number : 中断向量号,从0到FFHIF expression: 条件表达式,只有条件为真时,Sof- tICE三命令: BPINT作用: 在某个中断向量上下断点语法: BPINT int-number [IF expression][DO "command1;command2;..."]用法:int-number : 中断向量号,从0到FFHIF 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: 条件表达式,只有条件为"真"时,Sof-tICE才在断点处弹出.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每经过一次断点,计数+1Breaks: 在IF expression子句为真的情况下,SoftICE就会产生动作,要么弹出,要么记录在内存中,不管怎样,计数+1Popups: 在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,否则为NoAction: 如果断点带有附加的动作(即有DO command),则为Yes,否则为No点评: 无有关SoftICE的详细操作指导教程(4)时间:2009-08-19 14:05来源:未知作者:编辑 B 点击:2541次四命令: C 作用: 比较内存中两块区域的内容语法: C start-address l length start-address-2 用法: start-address : 第一块内存区域的开始地址length : 字节长度start-address-2: 第二块内存区域的开始地址如果比四命令: 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 和长度, 则结果不论数据窗口可见还是不可见,都显示在命令窗口中.点评: 无有关SoftICE的详细操作指导教程(5)时间:2009-08-19 14:05来源:未知作者:编辑 B 点击:2542次五命令: DATA 作用: 显示另一个数据窗口语法: DATA [window-number] 用法: window-number: 所要选择的窗口号,0,1,2,3SoftICE最多支持4个数据窗口.每一个窗口可以独立按自己的格式显示数据. 但同一时刻只能显示一五命令: DATA作用: 显示另一个数据窗口语法: DATA [window-number]用法:window-number: 所要选择的窗口号,0,1,2,3SoftICE最多支持4个数据窗口.每一个窗口可以独立按自己的格式显示数据. 但同一时刻只能显示一个窗口.如果用DATA窗口不带任何参数, 将按0,1,2,3的次序显示各个窗口中的内容.在数据窗口的右上角的横线上有窗口序号的提示.点评: 可以很方便地对多个目标的进行观察命令: DEX作用: 在数据窗口中显示(或赋予)某个表达式语法: DEX [data-window-number [expression]]用法:data-window-number: 即DATA命令中所讲的0,1,2,3号数据窗口DEX 命令可以为每一个数据窗口赋予一个表达式,每次SoftICE弹出该表达式就被重新计算, 并显示在相应的数据窗口中.这对某些指针非常有用. 指针可以放在寄存器中或是在内存变量中,如下二例:DEX 0 SS:ESP 每次SoftICE弹出, 就在0号数据窗口中显示堆栈的值DEX 1 @pointervariable 每次SoftICE弹出, 就在1号窗口中显示由pointervariable指针所指的内存单元的内容.(@ 操作符后有论述).用DEX不带参数将显示当前在各个数据窗口中所赋予的表达式. 用 DEX data-window-number(不跟表达式)将取消前次赋予窗口的表达式.点评: 相当于自动化的D命令.命令: DIAL作用: 将控制台重定向到MODEM语法: DIAL [on [ com-port] [ baud-rate] [i=init-string] [p=number] | off] 用法: COM-PORT : 串行通讯口,默认为COM1BAUD-RATE: 1200,2400,4800, 9600, 19200, 23040,28800,38400(默认),57000,115000I=INIT : MODEM的初始化字符串.p=number : 电话号码DIAL 命令通过拨号与远程电脑取得联系, 远程电脑必需正在运行SERIAL.EXE且在等待对方拨号.一旦联接完成,SoftICE的的输入将来自远程计算机,输出也重定向到远程计算机.本地计算机除了激活的热键外不接收其他对SoftICE的输入.当远程机结束调试后,用DIAL OFF来挂断MODEM.点评:前次的ANSWER命令是等远程机拨号过来,而DIAL是拨过去.有机会试一下这两个命令就好了.命令: E作用: 修改内存单元语法: E[size] [address [data-list]]用法:size : B 字节;W 字;D 双字;S 短实型;L 长实型;T 10字节的实型data-list: 要修改的值,(和size类型一致) 可用单引号或双引号来输入字符串.如果键入没有data-list参数的E 命令, 光标将切换到数据窗口并定位到所指定的内存单元,等待使用者相应的操作.如果加跟data-list参数,则内存单元立刻被修改为所指定的值.数据窗口当前如果不可见, 则键入E命令将使之可见.在修改中可以用TAB键在ASCII与十六进制方式之间切换.点评: 无。