SoftICE使用(指令)

作者:kill

  
   §5.5 公用指令

指令:

A --- 组译程式码

S --- 搜寻资料

F --- 将资料填入记忆体

M --- 搬移资料

C --- 比较两记忆区块

A --- 组译程式码

语法: A [address]

解说:

Soft-ICE 的组译器允许你把程式码直接组译进记忆体中。这个组译器支援基
本的 8086 程式码及 80186 、80286 真实定址模式的扩充。但是运算辅助器及
80386 的特殊程式码、暂存器定址模式等无法组译。

A 指令会进入 Soft-ICE 内建的组译器。每行前会显示位址当提示符号。当
组合语言之程式码打入并按下 Enter 後,此程式码会组译进指定位址的记忆体中
。程式码必需符合标准的 Intel 模式。在位址提示符号下按 Enter 会离开组译
模式。

如果你正组译的记忆体范围在程式码窗中是可见的,在你组译时程式码会交
互变化。

Soft-ICE 的组译器支援标准的 8086 族指令,不过有些加强:

* DB 指令用来直接定义记忆体中之位元组资料。DB 指令後接一串位元组资
料 或/和 由空白、逗号分隔的字串。

* RETF 代表一个 far return 。

* WORD PTR 和 BYTE PTR 用来决定资料的大小。如:
MOV BYTE PTR ES:[1234],1

* 使用 FAR 和 NEAR 以明确的指定远程或近程的跳跃或呼叫。如果未指定
FAR 、NEAR ,一律视为 NEAR 。

* 参考到记忆体位置的运算域必需放在方括号中。如: MOV AX,[1234] 。

〔例〕 A CS:1234
这道指令会提示你输入组合语言码并从 CS:1234 开始组译之。输入最後一
道程式码後在位址提示符号後按 Enter 。

S --- 搜寻资料

语法: S address L lebgth data-list

data-list --- 一串位元组资料或以逗号、空白分隔的加引号字串。加引号
的字串可以使用单引号或双引号。

length --- 位元组长度。

解说:

S 指令会在记忆体中搜寻和 data-list 相同之位元组或字元。搜寻的动作由
指定的 address 开始,持续搜寻 length 位元组。每个发现的位址都会显示出来


〔例〕 S DS:SI+10 L CX 'Hello',12,34
这道指令会从目前的资料节段中差距位址为 SI+10 处开始搜寻 Hello 字
串後接 12h 、13h 的资料。搜寻会持续 CX 位元组才停止。

H --- 将资料填入记忆体

语法: F address L length data-list

data-list --- 一串位元组资料或以逗号、空白分隔的加引号字串。加引号
的字串可以使用单引号或双引号。

length --- 位元组长度。

解说:

F 指令会用指定的 data-list 来填满记忆体。填入的动作会从指定的
address 开始并持续 length 位元组。如果有需要会重覆 data-list 。

〔例〕 F 8000:0 l 100 'Test'
这道指令会从 8000:0000 开始填入 100h 位元组的 Test 。Test 字串会
一直重覆直到填完指定的长度。

M --- 搬移资料

语法: M start-address L length end-address

length --- 位元组长度。

解说:

M 指令会从指定的 start-address 搬移 length 位元组的资料到
end-address 。

〔例〕 M 1000:0 L 200 2000:0
这道指令会从记忆体位址 1000:0000 处搬移 200h 位元组的资料到
2000:0000 处。

C --- 比较两记忆区块

语法: C address1 L length address2

length --- 位元组长度。


解说:

C 指令会拿 address1 处 length 位元组大小的记忆体区块和 address2 处
之资料做比较。如果第一块区块的值和第二块的值不同时会显示两者各自之值及
其记忆体位址。

〔例〕 C 5000:100 L 10 6000:100
这道指令会比较从记忆体位址 5000:100 开始 10h 位元组之记忆体区块和
从 6000:100 开始 10h 位元组的记忆体区块之值。

§ 5.6 特别的除错指令

指令:

SHOW --- 显示在 history buffer 中之程式码

TRACE --- 进入模拟追踪模式 (trace simulation)

XT --- 在模拟追踪模式中进行单步执行

XP --- 在模拟追踪模式中进行程式单步

XG --- 在模拟追踪模式中执行到某位址

XRSET --- 重设回溯追踪缓冲区 (back trace buffer)

VECS --- 储存/还原/比较插断向量

SNAP --- 拍下记忆体区段的快照

EMMMAP --- 显示 EMM 分配图

SHOW --- 显示在 history buffer 中之程式码

语法: SHOW [B | start]


B --- 这会使 SHOW 指令从缓冲区中最早的程式码开始显示。

start --- 从缓冲区中最後一个程式码(最後抓入之程式码)之前多少程式
码开始显示。

解说:

SHOW 指令会显示在回溯追踪缓冲区中之程式码。如果有程式码之原始码,会
以混合的方式显示;否则只显示程式码。

SHOW 指令可以用上、下、PageUp 、PageDown 等键来卷动。按 Esc 键以离
开 SHOW 指令。

在每道程式码位址之前有个缓冲区记入号码。这个号码表示你多深入显示缓
冲区。号码越高表示你在缓冲区中更深的地方。

〔注〕在使用 SHOW 指令之前必需先用范围回溯追踪记录程式码。参阅第九章以
取得更多有关范围回溯追踪的资讯。

〔建议〕把程式码窗设为可见并在其中显示目前回溯追踪缓冲区之真正程式码区
段是很有用的。以此比较程式码和真正之流程时较不会为跳跃和呼叫困
扰。

在 TRACE 指令後接著使用 SHOW 指令可以让你用两种不同的观点来看在回溯
追踪缓冲区中之程式码。


〔例〕 SHOW 40
这道指令会从回溯追踪缓冲区倒数第 40 个程式码开始显示。

TRACE --- 进入模拟追踪模式 (trace simulation)

语法: TRACE [start] | [OFF]

start --- 从缓冲区中最後一个程式码(最後抓入之程式码)之前多少程式
码开始模拟追踪。

OFF --- 离开模拟追踪模式。

解说:

TRACE 指令让你可以把回溯追踪缓冲区中之程式码以宛如第一次执行之情形
再重播一次。你必需把程式码窗设为可见才能使用模拟追踪模式。进入模拟追踪
模式後,你可以使用 XT 、XP 和 XG 指令来追踪缓冲区中之程式码。

输入 TRACE OFF 以离开模拟追踪模式。

未加参数的 TRACE 指令会显示目前模拟追踪模式是 ON 或 OFF 。

〔注〕在使用 TRACE 指令之前必需先用范围回溯追踪记录程式码。参阅第九章以
取得更多有关范围回溯追踪的资讯。

〔建议〕在程式码窗设为可见之状态下模拟追踪模式可发挥最大功能。把 TRACE
指令和 SHOW 指令连接使用是很有用的。这会同时以两种不同的型式显
示回溯追踪缓冲区中之程式码。

〔例〕 TRACE 40
这道指令会从回溯追踪缓冲区倒数第 40 个程式码开始进入模拟追踪模式
。在输入 TRACE OFF 指令之前会一直留在模拟追踪模式。

XT --- 在模拟追踪模式中进行单步执行

语法: XT [R]

R --- 反向进行单步执行。

解说:

XT 指令会单步执行在回溯追踪缓冲区中之程式码。这个指令的行为类似普通
除错中之 T 。要注意的是在模拟追踪模式中单步执行不会改变除了 CS 、IP 外
之暂存器的值。

XT 指令让你可以重播回溯追踪缓冲区中之程式码。

〔注〕在使用 XT 指令之前必需先进入模拟追踪模式。参阅第九章及 TRACE 指令
以取得更多有关范围回溯追踪的资讯。

〔建议〕如果你常常使用 XT 指令,它可以像其它指令一样设个功能键代替。

〔例〕 XT
这道指令会在模拟追踪模式中单步执行一道程式码。

XP --- 在模拟追踪模式中进行程式单步

语法: XP

解说:

XP 指令会在回溯追踪缓冲区中进行一程式单步。这个指令的行为类似普通除
错中之 T 。要注意的是除了 CS 、IP 外之暂存器的值均不会改变。

XP 指令让你可以重播回溯追踪缓冲区中之程式码。

〔注〕在使用 XP 指令之前必需先进入模拟追踪模式。参阅第九章及 TRACE 指令
以取得更多有关范围回溯追踪的资讯。

〔建议〕如果你常常使用 XP 指令,它可以像其它指令一样设个功能键代替。

〔例〕 XP
这道指令会在模拟追踪模式中程式单步一道程式码。

XG --- 在模拟追踪模式中执行到某位址

语法: XG [R] address

R --- 反向搜寻位址。

address --- 回溯追踪缓冲区中欲执行到之位址。

解说:

XG 指令会把程式码指标移到回溯追踪缓冲区中指定之位址的下一道程式码。
如果在位址之前有加 R 的话会把程式码指标移到指定位址的前一道程式码。

address 必需是一道程式码叙述的第一位元组。

XG 指令的行为类似普通除错中之 G 。

〔注〕在使用 XG 指令之前必需先进入模拟追踪模式。参阅第九章及 TRACE 指令
以取得更多有关范围回溯追踪的资讯。

〔例〕 XG 273:1030
这道指令会把程式码指标移到位址 273:1030 的後一道指令。

XRSET --- 重设回溯追踪缓冲区 (back trace buffer)

语法: XRSET

解说:

XRSET 指令会重设回溯追踪缓冲区。如果在回溯追踪缓冲区中有你不想要的
程式码时,在设定回溯范围时要先执行这个指令。

〔例〕 SRSET
这道指令会重设回溯追踪缓冲区。

VECS --- 储存/还原/比较插断向量

语法: VECS [C|S|R]

C --- 比较目前的插断向量表和储存起来之表。

S --- 储存目前插断向量表。

R --- 由缓冲区中还原插断向量表。

解说:

VECS 指令允许你把插断向量表储存到 Soft-ICE 中之内建缓冲区或还原之。
你也可以比较真正的插断向量表和储存起来之表并显示出两者间不同之处

使用 C 指令比较目前的插断向量表和储存之向量表时,会以下列格式显示:

address old-vector new-vector

每个有改变的插断向量均会显示出来。

载入 Soft-ICE 时之插断向量表会被储存起来。当程式以 LDR.EXE 载入时也
会自动储存向量表。只有一份插断向量表会被储存,所以每次执行 VECS S 时上
一份备份的插断向量表会被覆写掉。

如果没有加参数则会显示整个插断向量表。

〔例〕 VECS C
这道指令会比较真正的插断向量表和上次储存在 Soft-ICE 内建缓冲区中
之插断向量表。

SNAP --- 拍下记忆体区段的快照

语法: SNAP [C | S | R] address1 address2

C --- 比较缓冲区和记忆体范围。

S --- 把记忆体范围存到缓冲区中。

R --- 从缓冲区还原记忆体范围。

解说:

SNAP 指令会拍下记忆体区段的快照以供稍後的比较用。用 S 参数会把一记
忆体范围备份到延伸记忆体中之缓冲区里。使用 C 参数会显示延伸记忆体中缓冲
区和指定的位址范围之真实记忆体间不同之处。加上 R 参数则会把延伸记忆体中
之缓冲区拷贝到主记忆体中之位址范围。

如果使用 C 参数来比较缓冲区和位址范围,则会以下列格式输出:

address old-data new-data

每一改变的位元组都会显示出来。

使用 C 和 R 指令时通常不需加 address 。如果没有指定 address ,则会
使用最後一次有加 address 之 SNAP 指令的 address 。

〔注〕要使用 SNAP 指令你必需在 CONFIG.SYS 中 S-ICE.EXE 那行加上
/TRA XXXX 参数。

SNAP 指令会把资料储存到回溯追踪缓冲区中。如果你正在使用回溯追踪则会
和 SNAP 起冲突。如果你在回溯追踪缓冲区中有程式码资料时使用 SNAP S 指令
会把回溯追踪资讯覆写掉。反过来说,如果你用 SNAP 指令储存一区段然後又打
开范围回溯追踪则会覆写掉 SNAP 的缓冲区。

〔例〕 SNAP S 2000:0 4000:0
这道指令会把从 2000:0 到 4000:0 的资料区段存到 Soft-ICE 的回溯追
踪缓冲区。

EMMMAP --- 显示 EMM 分配图

语法: EMMMAP

解说:

EMMMAP 指令会显示 EMM 记忆体中每一个可取得的 page 及目前映射到的
page 。

〔注〕你必需启动 Soft-ICE 的 EMM 特性才能使用这个功能。参阅第八章以
取得更多有关启动 EMM 能力的资讯。

〔例〕 EMMMAP
这会以下列的格式显示目前 EMM 的分配情形:

Phy Page Seg addres Handle/Page
00 D000 FFFF
01 D400 0001/0000
02 D800 0001/0001
03 DC00 0001/0002

在这个范例中,page 0 是在 D000 且没有映射。pgae 1 是在 D400 ,
handle 是 1 且 page 0 映射到此。page 2 是在 D800 ,handle 是 1 且
page 1 映射到此。page 3 是在 DC00 ,handle 是 1 且 page 2 映射到此。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值