SoftICE使用说明(六)

   §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 映射到此。
 
目录: 本手册的功能 读者对象 本手册的组织结构 排版风格 如何使用本手册 其它相关文件 (外国人就是罗嗦,为了求全,只好随他了。) 第一章 欢迎使用SoftICE 产品概况 介绍SoftICE 介绍Symbol Loader 如何得到客户服务 联系NuMega公司的技术支持中心 第二章 安装SoftICE 介绍 硬件和软件要求 SoftICE显示选择 安装之前 安装 安装之后 配置BOOT。INI以便在多处理器系统中支持单CPU 配置SoftICE在Windows 95下正确载入 通过串行口连接第二台计算机 解决显卡问题 第三章 SoftICE教程 介绍 载入SoftICE 构造GDIDEMO样本程序 装入GDIDEMO样本程序 控制SoftICE屏幕 通过源码跟踪和逐步调试 读本地数据 设定断点和目标断点 设定一个断点 设定STICKY断点 (此处不知STICKY作何解释。待我读到此处时大概会明白) 使用SoftICE命令行信息 使用符号和符号表 设定条件断点 设置BPX断点 编辑断点 设定读写内存断点 第四章 将代码装入SoftICE 调试的概念 准备调试程序 准备调试设备驱动程序和VxDs(虚拟设备驱动程序) 手工装入SoftICE 装入SoftICE for Windows 95 装入SoftICE for Windows NT 构造带有调试信息的程序 使用Symbol Loader转换和载入文件 修改模块设定 修改通用设定 修改编译设定 修改调试设定 指定程序的源文件 删除符号表 在DOS命令行里使用Symbol Loader 使用Symbol Loader的命令行工具 NMSYM命令行的语法 使用NMSYM来转换符号信息 使用NMSYM来装入模块和符号信息 使用NMSYM来装入或导出符号表 使用NMSYM卸载符号信息 使用NMSYM来保存历史记录 关于NMSYM的信息 第五章 SoftICE导航 介绍 呼出SoftICE窗口 启动时禁用SoftICE 使用SoftICE窗口 调整窗口大小 控制窗口 拷贝和粘贴数据 用鼠标输入命令 得到帮助 使用命令窗口 滚动窗口 键入命令 重呼命令 使用运行时宏 将命令窗口的历史缓存保存到文件 相关命令 控制代码窗口 读信息 在代码窗口键入命令 使用本地窗口 控制本地窗口 扩展和分解堆栈 相关命令 使用观察窗口 控制观察窗口 设定观察表达式 读信息 扩展和分解类型表达式 相关命令 使用寄存器窗口 控制寄存器窗口 读信息 编辑寄存器和标志位 相关命令 使用数据窗口 控制数据窗口 读信息 改变内存地址和格式 编辑内存 辅助表达式 相关命令 第使用SoftICE 在跟踪错误时调试多个程序 跟踪错误 Ring-3 32位保护模式(Win32程序) Ring-0 驱动代码(内核模式设备驱动程序) Ring-3 16位保护模式(16位Win程序) 地址内容 使用INT 0x41 .DOT命令 理解从R-3到R-0的转变 第七章 使用断点 第八章 ----------------------------------------------------------- (...很累人那!今天就这些了吧.因为我也是读一些翻译一些,所以有些"向前引用 "的名词术语不知道要如何解释其意义.应该读完再翻译比较好...不过那个时候我 又开学了...呜...一点时间也没有了!) 第七章 使用断点 介绍 SoftICE所支持的断点类型 断点选项 执行断点 内存断点 中断断点 I/O断点 窗口消息断点 理解断点的含义 虚断点 设置断点活动 条件断点 条件断点计数功能 在条件表达式中使用本地变量 在条件断点里引用堆栈 参考 多重断点 所用时间 断点统计 在表达式中引用断点 维护断点 使用内嵌断点 第八章 使用表达式 表达式 操作符 操作符优先级 形成表达式 表达式类型 定制类型 取得符号的数值 间接使用符号 第九章 装入系统组件符号 装入由DLL和EXE文件导出的符号表 使用未命名的入口点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值