SOFTICE命令详解2 FO 命令 F 作用 填充某一块内存区域语法 F.docx
- 文档编号:11516774
- 上传时间:2023-03-02
- 格式:DOCX
- 页数:23
- 大小:27.59KB
SOFTICE命令详解2 FO 命令 F 作用 填充某一块内存区域语法 F.docx
《SOFTICE命令详解2 FO 命令 F 作用 填充某一块内存区域语法 F.docx》由会员分享,可在线阅读,更多相关《SOFTICE命令详解2 FO 命令 F 作用 填充某一块内存区域语法 F.docx(23页珍藏版)》请在冰豆网上搜索。
SOFTICE命令详解2FO命令F作用填充某一块内存区域语法F
SOFT-ICE命令详解
(2)
F-O
命令:
F
作用:
填充某一块内存区域
语法:
Faddressllengthdata-list
用法:
length:
字节长度
data-list:
所要填的数据.可以是用单引号或双引号括起来的字符串执行F命令将向所指定的内存区域填充length长度的数据,如果数据不够长度,将重复数据,直到达到长度为止.
点评:
无
命令:
FAULTS
作用:
打开或关闭错误跟踪功能
语法:
FAULTS[on│off]
用法:
FAULTS命令将打开或关闭SoftICE的错误跟踪功能.不加参数将显示当前的开关状态.
点评:
由于SoftICE做为一个DEBUGGER,FAULTS默认为ON,所以一旦CPU有非法指令,SoftICE就会不停地弹出,让你知道错在哪里,实际在工作中这样的情况如果太频繁地发生,最好将其置为OFF.我一般将其置为ON,当发生非法指令时再手工置为OFF.你也可以在WINICE.DAT中一开始就置其为OFF.初学者一般不知道有这个命令,一旦发生非法指令,除了按R键,只有傻站着.-(
命令:
FILE
作用:
显示或切换当前源文件
#语法:
FILE[file-name]
用法:
FILE命令常用来辅助在源文件中没有符号表的地方下断点.用FILE命令将所需的源文件显示在代码窗口中,用SS命令查找一下,再用BPX或F9来下断点.如果加文件名参数,则所选的文件变成当前文件,并被显示在代码窗口中.如果没有文件名参数,则显示当前的源文件(如果当前有的话).如果加*,则列出当前符号表中所有源文件.在WIN95中,用FILE加文件名同时也切换内存地址内容.
点评:
一般用于高级编程工具的辅助调试,如C语言等.不过这些编程工具已经内置DEBUGGER,所以就看个人习惯了.
命令:
FKEY
作用:
显示或修改当前快捷键定义
语法:
FKEY[function-keystring]
用法:
function-key:
快捷键:
F1-F12:
SF1-SF12:
Shift键加F1-F12
CF1-CF12:
Ctrl键加F1-F12
AF1-AF12:
Alt键加F1-F12
string:
一个或多个SoftICE的命令.
命令前加^表示在按快捷键时不显示相应的命令内容.命令后加;代表回车.FKEY后只跟function-key,而不跟string,将取消该快捷定义.除了用FKEY命令可以定义快捷键外,用SoftICE的LOADER也能做到这一点默认快捷键清单:
F1=h;F2=^wr;
F3=^src;F4=^rs;
F5=^x;F6=^ec;
F7=^here;F8=^t;
F9=^bpx;F10=^p;
F11=^G@SS:
ESP;F12=^pret;
SF3=^format;CF8=^XT;
CF9=TRACEOFF;CF10=^XP;
CF11=SHOWB;CF12=TRACEB;
AF1=^wr;AF2=^wd;
AF3=^wc;AF4=^ww;
AF5=CLS;AF8=^XTR;
AF11=^dddataaddr->0;
AF12=^dddataaddr->4;
CF1=altscroff;lines60;wc32;wd8;
CF2=^wr;^wd;^wc;
点评:
无
命令:
FLASH
作用:
在P和T命令执行过程中刷新Windows屏幕
语法:
FLASH[on│off]
用法:
如果将FLASH置为ON,则在执行T或P命令时,SoftICE将刷新一下Windows屏幕,这在调试一个直接对显存操作的程序时特别有用.在一般情况下,当用P命令跨过一个CALL时,而此CALL又调用显示驱动程序时,Sof-tICE才重新刷新屏幕.FLASH命令不带参数将显示当前状态.默认FLASHOFF.
点评:
无
命令:
FORMAT
作用:
改变数据窗口的显示格式
语法:
FORMAT
用法:
FORMAT命令用来改变数据窗口的显示格式.SoftICE有快捷键Shift-F3来代替FORMAT.显示格式将按字节,字,双字,短实型,长实型,10字节实型循环.
点评:
参见D,DATA命令.
命令:
G
作用:
执行到某一地址
语法:
G[=start-address][break-address]
用法:
=start-address:
开始地址
break-address:
中断地址
G命令不带参数将从SoftICE中返回.如果带参数break-address,则SoftICE将在所指定的地址处下一个一次性断点;如果带=start-address,SoftICE将从指定的地址处开始执行,否则从当前CS:
EIP处执行.程序中其他的断点(非G命令下的断点)照样起作用.无论是谁先弹出,都将清除G命令所下的一次性断点.
G命令不带参数类似于X命令.G命令在Windows95中使用除错寄存器,如果除错寄存器用完,则用INT3.
点评:
由于G命令缺省用DRx,所以有时可以对付一些在INT3上作手脚的程序.
命令:
GDT
作用:
显示全局描述符表
语法:
GDT[selector]
用法:
selector:
指定GDT选择器
GDT命令将显示全局描述符表的内容.如果加选择符参数,则只显示此选择符所指的描述符.输出:
GDT的线性基址和长度将显示在输出数据的顶行.
输出数据的每一行内容的说明:
value:
最低两位即描述符特权级
type:
描述符类型,如下:
Code16:
16位代码描述符
Data16:
16位数据描述符
Code32:
32位代码描述符
Data32:
32位数据描述符
LDT:
局部描述符表描述符
TSS32:
32位任务状态段描述符
TSS16:
16位任务状态段描述符
CallG32:
32位调用门描述符
CallG16:
16位调用门描述符
TaskG32:
32位任务门描述符
TaskG16:
16位任务门描述符
TrapG32:
32位陷肼门描述符
TrapG16:
16位陷肼门描述符
IntG32:
32位中断门描述符
IntG16:
16位中断门描述符
Reserved:
保留的描述符
base:
描述符中的段基址
limit:
描述符中的段界限
DPL:
描述符特权级,0,1,2,3
presentbit:
P或NP表示该段是否在内存中
segmentattributes:
段特性:
RW:
数据段可读写
RO:
数据段只读
RE:
代码段可读可执行
EO:
代码段只可执行
B:
TSS(任务状态段)忙置位
ED:
数据扩展方式
参见LDT.
点评:
这段翻译并不完全用PDF手册上的.如"selector"原指选择符(器),用来指向描述符表中的描述符,而PDF中type的说明全用到selector说的意思虽是一样,但和别的文献矛盾,故认为不妥,将其翻译成descriptor即描述符.实际上可以看出,一个选择符指向一个描述符,两者是一致的.描述符类型实际上也就是指向它的选择
符类型.
命令:
GENINT
作用:
强行产生一个中断
语法:
GENINT[nmi│int1│int3│interrupt-number]
用法:
interrupt-number:
对Windows95来说,0-5fh
GENINT强行产生一个中断,用于SoftICE和别的DEBUGGER协作的时侯,如:
GENINTnmi将使SoftICE将控制返还给CodeViewForDos.(对其他DEBUGGER,请尝试0,1,2,3)GENINT还用于测试中断例程.但SoftICE不检测一个中断是否有效,它只是摹拟中断的产生,所以当用此命令时要注意相应的中断例程是否存在.
点评:
无
命令:
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选择符
HEAPFREE将显示空闲的全局堆.
HEAP跟模块名将只显示由指定的模块拥有的全局堆入口.HEAP跟LDT选择符将只显示与此选择符相应的全局堆入口.HEAP不带参数将显示整个全局堆的情况.
输出:
selectororhandle:
选择符符或句柄.
address:
32位虚拟地址
size:
堆的大小(字节)
modulename:
模块名
--------------------------------
type:
全局堆的类型
code:
不可丢弃的代码段
codeD:
可丢弃的代码段
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将显示该进程的非缺省堆.
WINDOWS95的调试版还提供了额外的调试信息,想要用SoftICE看到这些信息,必须:
.对于KERNEL32Ring-0堆,必须安装有SDK除错版.
.对于VMMRing-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,只有用完时才用INT3
点评:
无.
命令:
HWND
作用:
显示窗口句柄的信息
语法:
HWND[-x][hwnd│[[level][process-name]]
用法:
level:
窗口等级号码.0是最高级.1其次,等等.窗口等级代表了父窗口和子窗口的关系.
-x:
显示窗口的冗余信息.
hwnd:
窗口句柄.
process-name:
任何当前进程名
如果指定了窗口句柄,就无需指定等级,进程名等其他参数,SoftICE将显示所指定窗口句柄的信息.
输出:
ClassName:
此窗口所属类的名称或类的原子.
WindowProcedure:
窗口函数.
点评:
窗口句柄很有用的.(废话!
)
命令:
I
作用:
从输入/输出(I/O)端口读入数据
语法:
I[size]port
用法:
size:
B字节(默认);W字;D双字
port:
端口地址.
I命令在大多数情况下是作一个I/O输入指令,获取真实的硬件端口的数据.在虚拟端口的情况下,取得真实值和应用程序所见到的虚拟值可能不同.对于21h和A1h端口,SoftICE是例外,它不进行读取,而是返回So-ftICE弹出时的值.
点评:
参见O命令.
命令:
I1HERE
作用:
遇到内嵌的INT1指令时激活SoftICE
语法:
I1HERE[on│off]
用法:
I1HERE命令使SoftICE在遇到程序中内嵌的INT1指令时弹出.I1HERE在调试程序时需在某处暂停时特别有用.在SoftICE弹出之前,SoftICE会检查当前是否有一条INT1指令在程序中.如果没有的话,SoftICE将不弹出.在程序要暂停的指令之前加一句INT1就能做到这一点.SoftICE弹出时,EIP会停在INT1的下一条指令后.
I1HERE不带参数将显示当前I1HERE的状态.缺省为OFFI1HERE在与如BoundsChecker之类的调试工具分工协作时很有用,因为BoundsChecker用到INT3,为了防止冲突应使用INT1.另外,VMM,Windows内存管理的VxD,在Windows出现某些严重错误时会在严重错误返回前执行一个INT1指令.如果此时I1HERE为ON时,你就能跟踪这类错误.如由VMM因换页错误而产生INT1时寄存
器的值如下:
.EAX=错误地址.
.ESI指向一个ASCII字符串(信息).
.EBP指向一个CRS(在DDK的VMM.INC中定义的客户寄存器结构)
点评:
基础信息:
INT1实际上是单步中断的处理例程.CPU在检测到TP标志为1时(TP是由DEBUGGER设的),就自动进行这一例程.DEBUGGER们挂接这个中断例程进行一些诸如显示当前寄存器值等操作,并等待用户进一步的指令.在程序中直接用INT1指令也能达到效果.SoftICE不象DOS下的DEBUG.EXE,一碰到INT1就中断,
缺省是不中断的,只有当I1HERE为ON时才中断.
命令:
I3HERE
作用:
在遇到INT3指令时激活SoftICE
语法:
I3HERE[on│off]
用法:
I3HEREON将使SoftICE每碰到一个INT3时都弹出,这在调试程序时需要在某处暂停特别有用.在你需要暂停的指令之前加一个INT3就行.如果你是编WINDOWS程序,加个函数DebugBreak().这个函数也执行一个INT3.
I3HERE不带参数将显示当前状态.请参见I1HERE.
点评:
基础信息:
INT3是断点中断处理例程.也被DEBUGGER们挂接,显示寄存器值,给出一些信息,并等待用户下一步操作.DEBUGGER在下断点时,将断点处的指令替换成INT3,把替换下的指令保存,在执行完例程后再恢复原先保存的指令,修改堆栈中的断点地址,使程序得以继续.DOS下的老DEBUG.EXE当遇到程序中的INT3指令时会进行同样的操作,也修改堆栈中的断点地址,所以IP又停在那条INT3上,如果你打入G,程序将一直停在此处,这时改一下IP就可以了.
命令:
IDT
作用:
显示中断描述符表
语法:
IDT[interrupt-number]
用法:
interrupt-number:
所要显示的中断号IDT命令读取中断描述符表寄存器的值,获得表基址,然后显示中断描述符表的内容.IDT命令不带参数将显示所有中断的情况,如果带中断号,则只显示相应的入口.输出参数如下:
interruptnumber:
0-05fh的中断号.
interrupttype:
中断类型如下:
---------------------
CallG32:
32位调用门.
CallG16:
16位调用门.
TaskG:
任务门.
TrapG16:
16位陷肼门.
TrapG32:
32位陷肼门.
IntG32:
32位中断门.
IntG16:
16位中断门.
---------------------
address:
(选择符:
偏移量)形式的地址.
selector'sDPL:
选择符的描述符特权级,0,1,2,3
presentbit:
P或NP,表示该描述符是否在内存中.
Owner+Offset:
符号名或拥有者名,和在它们中的偏移.
点评:
参见GDT,LDT.
命令:
LDT
作用:
显示局部描述符表
语法:
LDT[selector]
用法:
selector:
指定LDT选择符LDT命令将显示局部描述符表的内容.SoftICE先读取局部描述符表寄存器的值,再定位描述符表.如果局部描述符表不存在,会显示一个错误信息.如果指定选择符,则只显示该选择符所指向的描述符.如果指定的选择符是一个全局选择符,则SoftICE将自动显示该全局选择符所指的描述符.
输出:
LDT的线性基址和长度将显示在输出数据的顶行输出数据的每一行内容的说明:
value:
最低两位即描述符特权级
type:
描述符类型,如下:
---------------------------
Code16:
16位代码描述符
Data16:
16位数据描述符
Code32:
32位代码描述符
Data32:
32位数据描述符
CallG32:
32位调用门描述符
CallG16:
16位调用门描述符
TaskG32:
32位任务门描述符
TaskG16:
16位任务门描述符
TrapG32:
32位陷肼门描述符
TrapG16:
16位陷肼门描述符
IntG32:
32位中断门描述符
IntG16:
16位中断门描述符
Reserved:
保留的描述符
---------------------------
base:
描述符中的段基址
limit:
描述符中的段界限
DPL:
描述符特权级,0,1,2,3
presentbit:
P或NP表示该段是否在内存中
segmentattributes:
段特性:
---------------------------
RW:
数据段可读写
RO:
数据段只读
RE:
代码段可读可执行
EO:
代码段只可执行
B:
TSS(任务状态段)忙置位
---------------------------
点评:
这段翻译并不完全用PDF手册上的.如"selector"原指选择符(器),用来指向描述符表中的描述符,而PDF手册中type的说明全用到selector.说的意思虽是一样,但和别的文献矛盾,故认为不妥,将其翻译成descriptor,即描述符.实际上可以看出,一个选择符指向一个描述符,两者是一致的.描述符类型实际上也就是指向它的
选择符类型.
命令:
LHEAP
作用:
显示Windows局部堆
语法:
LHEAP[selector│module-name]
用法:
selector:
局部描述符表数据选择符.
module-name:
16位模块名.
LHEAP显示Windows程序在全局堆中申请的数据信息.
如果不跟选择符参数,当前的DS寄存器的内容(数据选择符)被做为缺省值.用前次说过的HEAP命令找标有LH的选择符来做为LHEAP的参数.如果用module-name做参数,则SoftICE用此模块的缺省数据段进行堆遍历.
输出:
offset:
16位的偏移量(相对于相应的选择符基址)
size:
堆入口(每个组成部分)的字节大小.
type:
类型如下:
---------------------
FIX:
固定的.
MOV:
可移动的.
FREE:
空闲的.
---------------------
handle:
相应的句柄.对固定的堆组成部分来说,此值和offset
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SOFTICE命令详解2 FO 命令 作用 填充某一块内存区域语法 SOFTICE 详解 填充 某一 内存 区域 语法