老文章档案 · 2003 年

SoftICE for WIN95中文命令解说(八)

赢政天下 [WINZHENG.COM] · 网络学院 · 2003-06-15 · 作者:TiANWEi 人气: · 出处:嬴政天下整理收藏)

命令:

I1HERE

作用:

遇到内嵌的INT 1指令时激活SoftICE

语法:

I1HERE [on | off]

用法:

I1HERE 命令使SoftICE在遇到程序中内嵌的INT 1指令

时弹出.I1HERE在调试程序时需在某处暂停时特别有用

.在SoftICE弹出之前, SoftICE会检查当前是否有一条

INT 1指令在程序中.如果没有的话,SoftICE将不弹出.

在程序要暂停的指令之前加一句INT 1 就能做到这一

点.SoftICE弹出时,EIP 会停在INT 1的下一条指令后.

I1HERE 不带参数将显示当前I1HERE的状态.缺省为OFF

I1HERE 在与如BoundsChecker 之类的调试工具分工协

作时很有用,因为BoundsChecker用到 INT 3,为了防止

冲突应使用INT 1. 另外,VMM,Windows内存管理的VxD,

在Windows出现某些严重错误时会在严重错误返回前执

行一个INT 1指令.如果此时I1HERE 为ON时, 你就能跟

踪这类错误. 如由VMM因换页错误而产生INT 1 时寄存

器的值如下:

.EAX = 错误地址.

.ESI 指向一个ASCII字符串(信息).

.EBP 指向一个CRS(在DDK的VMM.INC中定义的客户寄

存器结构)

点评:

基础信息: INT 1 实际上是单步中断的处理例程. CPU

在检测到 TP 标志为1时(TP是由DEBUGGER设的), 就自

动进行这一例程. DEBUGGER 们挂接这个中断例程进行

一些诸如显示当前寄存器值等操作,并等待用户进一步

的指令. 在程序中直接用 INT 1指令也能达到效果.

SoftICE不象DOS下的DEBUG.EXE,一碰到 INT 1 就中断,

缺省是不中断的,只有当I1HERE 为 ON 时才中断.

命令:

I3HERE

作用:

在遇到INT 3 指令时激活SoftICE

语法:

I3HERE [on | off]

用法:

I3HERE ON 将使SoftICE每碰到一个 INT 3 时都弹出,

这在调试程序时需要在某处暂停特别有用.在你需要暂

停的指令之前加一个INT 3 就行.如果你是编 WINDOWS

程序,加个函数 DebugBreak(). 这个函数也执行一个

INT 3.

I3HERE 不带参数将显示当前状态.请参见I1HERE.

点评:

基础信息: INT 3 是断点中断处理例程.也被DEBUGGER

们挂接,显示寄存器值,给出一些信息,并等待用户下一

步操作. DEBUGGER在下断点时,将断点处的指令替换成

INT 3,把替换下的指令保存,在执行完例程后再恢复原

先保存的指令,修改堆栈中的断点地址, 使程序得以继

续. DOS下的老DEBUG.EXE当遇到程序中的INT 3 指令时

会进行同样的操作,也修改堆栈中的断点地址,所以IP又

停在那条INT 3 上, 如果你打入 G ,程序将一直停在此

处,这时改一下IP就可以了.

命令:

IDT

作用:

显示中断描述符表

语法:

IDT [interrupt-number]

用法:

interrupt-number: 所要显示的中断号

IDT 命令读取中断描述符表寄存器的值, 获得表基址,

然后显示中断描述符表的内容.IDT 命令不带参数将显

示所有中断的情况,如果带中断号, 则只显示相应的入

口. 输出参数如下:

interrupt number: 0-05fh的中断号.

interrupt type : 中断类型如下:

---------------------

CallG32: 32位调用门.

CallG16: 16位调用门.

TaskG: 任务门.

TrapG16: 16位陷肼门.

TrapG32: 32位陷肼门.

IntG32: 32位中断门.

IntG16: 16位中断门.

---------------------

address : (选择符:偏移量)形式的地址.

selector's DPL : 选择符的描述符特权级,0,1,2,3

present bit : 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

present bit: P 或 NP 表示该段是否在内存中

segment attributes: 段特性:

---------------------------

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 相等,且是由 LocalAlloc()返回的.

对于可移动的组成部分来说,此值将会被做为

LocalLock()的参数.

点评:

无.(天气好热!翻译得好累!)

命令:

LINES

作用:

改变SoftICE窗口的显示行数

语法:

LINES [25 | 43 | 50 | 60]

用法:

LINES 命令用来改变SoftICE窗口的显示行数. 默认为

25行.可以有:

25 行;43 行;50 行;60 行;43,50,60行只适用于VGA卡.

LINES 不带参数将显示当前行数.如果用 ALTSCR 命令

切换显示器输出到单显,SoftICE自动转为25行,再转回

VGA卡时要手工用 LINES 命令来恢复原值.

点评:

实际上, 我的3.20用的是SoftICE自带的通用视频驱动

程序,行范围可以从25一直到128 !!(除非为SoftICE开

的显存不够)

命令:

LOCALS

作用:

从当前栈中列出局部变量

语法:

LOCALS

用法:

输出:

Stack Offset : 栈偏移.

Type definition: 类型定义.

Value,Data,or structure symbol({...})

: 值,数据,或结构符号.

SoftICE根据局部变量的类型来用不同的形式显示它们,

如果是指针,则显示所指向的数据.如果是结构,则显示

结构符号.如果既不是指针,又不是结构,则显示本身值.

点评:

无.

(出处:嬴政天下整理收藏)

相关文章:

相关软件:

→ 特别推荐

→ 热点TOP10

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史