发信人: liyv.bbs@bbs.cst.sh.cn (小邱), 信区: cnhacker
标 题: 使用soft_ICE 05 使用其它指令(1)
发信站: 生命玄机站 (Mon Sep 7 01:46:01 1998)
转信站: Lilac!ustcnews!cstshnews!lifebbs
第 五 章 使用其它指令
§5.1 显示及编辑类指令
指令:
U --- 反组译或显示原程式码
R --- 显示或更改暂存器
MAP --- 显示系统记忆体分布图
D --- 用最後一次指定的形式显示记忆体
DB --- 以位元组的形式显示记忆体
DW --- 以字组的形式显示记忆体
DD --- 以双字组的形式显示记忆体
E --- 用最後一次指定的形式编辑记忆体
EB --- 以位元组的形式编辑记忆体
EW --- 以字组的形式编辑记忆体
ED --- 以双字组的形式编辑记忆体
INT? --- 显示最後一次呼叫的插断号码
? 或 H --- 显示辅助讯息
VER --- 显示 Soft-ICE 的版本号码
U --- 反组译或显示原程式码
语法: U [address] [L [=] length]
length --- 要反组译的程式码长度
解说:
U 这个指令会显示正在除错的程式的程式码。
如果没有指定 length ,内定值是 8 行或萤幕长度减一。
如果未指定 address ,这个指令会从最後一次反组译的後一位元组开始反组
译。如果从未使用过反组译指令,则从目前 CS:IP 开始。
如果程式码窗是可见的,则程式码会显示在其中。
如果指定的位址范围的原始程式码有载入,由目前的原始码模式来决定是否
显示原始码。
〔例〕 U $-10
这道指令从目前位址的前 10h 位元组开始反组译。
〔例〕 u .499
这道指令会从 499 行开始显示 原始码。程式码窗必需是可见的且必需在
原始码模式。
R --- 显示或更改暂存器
语法: R register-name [ [=] value ]
register-name --- 为下列任一:
AL 、AH 、AX 、BL 、BH 、BX 、CL 、CH 、CX 、DL
DH 、DX 、DI 、SI 、BP 、SP 、IP 、CS 、DS 、ES
SS 、或 FL
value --- 如果 register-name 不是 FL ,value 是个 16 进位值或运算式
。若 register-name 为 FL ,value 下列旗号符号一或多个的组
合。旗号符号可视需要在前面加上 + 或 - 。
O -- Overflow flag 溢位旗号
D -- Direcrion flag 方向旗号
I -- Interrupt flag 插断旗号
S -- Sign flag 正负号旗号
Z -- Zero flag 零值旗号
A -- Auxiliary carry flag 辅助进位旗号
P -- Parity flag 极性旗号
C -- Carry flag 进位旗号
解说:
R 指令是用来显示或更改暂存器之值的。
如果没有指定参数会显示所有暂存器和旗号的值及目前 CS:IP 的程式码。
如果仅指定 register-name 而未加 value ,则 Soft-ICE 会显示指定暂存
器现在的值并提示你输入新值。如果 register-name 是 FL ,目前设置的旗号会
以高亮度大写显示;未设置的旗号则用普通小写显示。要维持现在暂存器的值,
直接按 Enter 。
如果 register-name 和 value 均有指定,则指定的暂存器的值将被改成
value 。
想要改变旗号的值,把 FL 当 register-name ,後接你想切换的旗号符号。
如果要设置某旗号,在旗号符号前加上 + 。要关闭某旗号,则在旗号符号前加上
一个 - 。旗号可以按任何顺序排列。
〔例〕 R AH 5
这道指令会把 AH 暂存器的值改成 5 。
〔例〕 R FL = O Z P
这道指令会切换 O 、Z 、P 旗号的值。
〔例〕 R FL
这道指令会显示目前旗号的值并让你可以修改其值。
〔例〕 R FL O +A -C
这道指令会切换 O 旗号,设置 A 旗号并关闭 C 旗号。
MAP --- 显示系统记忆体分布图
语法: MAP
解说:
MAP 指令显示各记忆体部份的名称、位置和大小。大小是以页来计算的。一
页等於 10h byte 。
CS:IP 所指的部份会以高亮度显示。
使用 MAP 指令的时机:
* 中断点发生时指向未知的记忆体区段。
* 你想控制常驻程式或系统程式。你可以根据 MAP 指令所显示的开始位址
汉大小来设置范围中断点。
* 你怀疑程式或系统在其记忆体空间之外写码。MAP 指令可用来找出此区段
的记忆体位址以便在 CSIP 中使用。
* 你必需找出哪个常驻程式拥有目前的插断向量。
〔例〕 MAP
以下是这道指令显示的范例:
..........
若 DOS 的版本低於 3.1 ,将显示程式的位址而非其程式名称。
D DB DW DD --- 显示记忆体
语法: D [size] [address] [ L [=] length ]
size --- B -- byte W -- word D -- double word
length --- 要显示几位元组。
解说:
D 这个指令会显示指定位址的记忆体内容。
记忆体内容是以指定的 size 的形式显示。如果没有指定 size ,会以最後
一次使用的 size 来显示。所有的形式均会显示 ASCII 码。
如果未指定 address ,则由前一次显示的最後一位元组的後一位元组开始显
示。
如果没有指定 length ,内定值是 8 行或因视窗较小而少一些。
若资料窗是可见的,则资料会显示在资料窗且 length 会被忽略。
〔例〕 DW DS:00 L=8
这道指令会以字组和 ASCII 的形式显示目前资料节段的前 8 位元组。
E EB EW ED --- 以位元组的形式编辑记忆体
语法: E [size] address [data-list]
size --- B -- byte W -- word D -- double word
data-list --- 一串指定之 size 的资料,(位元组、字组或双字组)或以
逗号、空白分隔的加引号字串。加引号的字串可以使用单引
号或双引号。
解说:
E 指令显示指定位址的记忆体内容并让你编辑其值。
这个指令以 ASCII 的形态显示记忆体内容,并且是以指定的 size 形态。
记忆体编辑器让你可以快速的更新记忆体。你可以键入 ASCII 字元或打入位
元组、字组、双字组之值以编辑记忆体。如果没有指定 size ,以最後一次使用
的 size 为准。以下是记忆体编辑的按键:
--- 游标上移
--- 游标下移
--- 游标右移
--- 游标左移
SPACE --- 游标移至下一个元素上
TAB --- 在数字区和 ASCII 区间切换
ESC 或 Enter --- 离开记忆体编辑器
在你输入资料之时,真正记忆体上的值也随之更新。所有的数字值都是以 16
进位表示。按 TAB 键可以在数字区和 ASCII 区间切换。
如果资料窗是可见的,则在其中修改资料;否则在指令窗中修改。
资料显示的长度,在指令窗中内定为 8 行。如果资料窗是可见的,则和资料
窗同大小。
如果未加参数且资料窗是可见的,则游标会移到资料窗中。若资料窗是不可
见的,则在指令窗中由最後一次显示或编辑的位址开始进行编辑。
〔例〕 EB 1000:0
这道指令由 1000:0000 开始,以位元组的形态,用数字和 ASCII 字元显
示资料的值。你可以编辑这些显示出来的值。
〔例〕 EB 8000:0 "HELLO",0D
这道指令把从 8000:0000 开始的值以 HELLO 字串和一个归位字元代替。
INT? --- 显示最後一次呼叫的插断号码
语法: INT?
解说:
INT? 指令显示最後一次发生的插断号码及其位址。
〔例〕 INT?
以下是 INT? 显示结果的例子:
Last Interrupt: 16
At: 0070:0255
这个例子显示在 Soft-ICE 视窗被叫出之前,系统最後一次呼叫的是 16h
插断,位址在 0070:0255 。如果最後一次插断是个软体插断,从 0070:0255
做反组译会显示此插断的程式码。若是个硬体插断,反组译则会显示插断发生
时所执行的程式码。
? 或 H --- 显示辅助讯息
语法: < ? | H > [command | expression]
解说:
? 和 H 指令两者均会显示辅助讯息。
如果未指定参数将会一次一个萤幕的显示所有指令和运算子的简单解说。按
任意键以继续显示或按 ESC 键离开辅助说明。
若有指定参数则会显示包括指令语法及范例的详尽说明。
如果加上运算式,则会计算并以 16 进位、10 进位及 ASCII 字元显示其结
果。
〔例〕 ? ALTKEY
这道指令会显示包括 ALTKEY 指令的语法及范例的资料。
〔例〕 H 10 + 14*2
这道指令会显示: 0038 00056 "8" 。这是 10+14*2 的 16 进位、10 进
位值及 ASCII 字元。
VER --- 显示 Soft-ICE 的版本号码
语法: VER
〔例〕 VER
这道指令会显示 Soft-ICE 的版本及 Nu-Mega 的版权讯息。
§5.2 I/O 埠指令
指令:
I 、IB --- 由位元组 I/O 埠输入
IW --- 由字组 I/O 埠输入
O 、OB --- 由位元组 I/O 埠输出
OW --- 由字组 I/O 埠输出
I 、IB 、IW --- 由 I/O 埠输入
语法: I [size] port
size --- B -- byte W -- word D -- double word
port --- 一个位元组或字组的值
解说:
这个由埠输入的指令是用来读取及显示硬体埠之值的。你可以从位元组或字
组埠输入。如果没有指定 size ,内定值是位元组。
〔例〕 I 21
这道指令是显示一号中断控制器的遮罩暂存器之值。
O 、OB 、OW --- 由字组 I/O 埠输出
语法: O [size] port value
size --- B -- byte W -- word D -- double word
port --- 一个位元组或字组的值
value --- 位元埠为一位元组值;字组埠为一字组值
解说:
对埠输出的指令是用来对硬体埠写值的。你可以对位元组埠或字组埠做输出
,如果没有指定 size ,内定值是位元组。
〔例〕 O 21 FF
这道指令会遮罩住一号中断控制器的所有中断。
--
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃萧秋水虽脸色苍白,但依然笑问道:“老铁,小邱,看来你们的 ┃
┃武功又有精进!” ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
※ 来源:·生命玄机 bbs.cst.sh.cn·[FROM: 202.127.16.22]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:207.151毫秒