Programming 版 (精华区)

发信人: zpw (zhao), 信区: Programming
标  题: SOFTICE使用手册(十一)
发信站: 紫 丁 香 (Fri Aug 14 17:14:28 1998), 转信

第   四   章       如何使用中断点指令
§4.1 序言
  Soft-ICE 具有以往只有硬件调试器才具有的中断点能力。因为 80386 晶片的威力和弹性,使我们不需要额外的硬件设备就能有更强大的中断点能力。
  中断点的触发可以由内存某地址的读取、内存范围的读取、程序的执行及端口的存取来达成。Soft-ICE 赋与每个中断点一个一位的 16 进制号码( 0 - F )。这个中断点号码是当你对中断点做删除、中止、启动、编辑等动作时使用。
      Soft-ICE 的所有中断点都是 "sticky" 。这个意思是这些中断点在启动後不会自动消失。你必需以 BC 或 BD 指令来消除或关闭它。Soft-ICE 一次可以处理 16个中断点。同种形态的中断点最多可以有 10 个。但内存地址的中断点 ( BPM )因 80386 
处理器之寄存器的缘故,最多只能设 4 个。
      中断点可以设个计数参数。计数参数是中断点真正触发作用前被忽略的次数。
§4.2 设置中断点
  指令:
      BPM BPMB BPMW BPMD  ---  在内存地址被存取或执行时引发中断
                     BPR  ---  对内存范围设置中断点
                    BPIO  ---  对 I/O 端口存取时触发中断
                   BPINT  ---  呼叫中断时触发中断
                     BPX  ---  设置 / 清除 执行中断点
                    CSIP  ---  CS:IP 范围的检定判断
                   BPAND  ---  等待复合中断点的发生
        BPM BPMB BPMW BPMD  ---  在内存地址被存取或执行时引发中断
  语法: BPM [size] address [verb] [qualifier value] [C=count]
        size --- B 、W 、D
                B -- byte 字节   W -- word 字组   D -- Double word 双字组size 是指中断点所涵盖的范围。举例来说,如果使用的是双字组,而其第三个字节被改变了,就会引发中断。如果有指定判断资格 (qualifier) ,size 也是很重要的。
        verb --- R 、W 、RW 或 X
        qualifier --- EQ 、NE 、GT 、LT 、MEQ -- 相等     NE -- 不等     GT -- 大於LT -- 小於      M -- 屏蔽
        qualifier 只有在读写中断点才有用到。
        value --- 由中断点大小决定是字节、字组或双字组的值
  解说:
        BPM 指令会在内存读、写或执行时引发中断。
        verb 内定值为 RW ; size 内定值为 byte 。
        除了 X 外的 verb 值会使程序执行引发中断的那段程序码。CS:IP 所指的是引发中断的後一行程序码。如果 verb 值是 X ,CS:IP 所指的是中断点设置的位置。
        如果设定的是 R ,当内存地址被读取或做没有改变的写入时,将引发中断。
        如果设定的是 R 、W 、RW 时,指定的地址被执行时并不会引发中断。
 〔注〕如果使用 BPMW ,指定的地址必需由字组边界开始。如果使用 BPMD ,指定的地址必需指向一个双字组边界。
 〔例〕 BPM 1234:SI W EQ 10 C=3
  这道指令设定一个字节的内存存取中断点。当 10H 第三次写入 1234:SI时将启动中断点。
    〔例〕 BPM CS:1235 X
  这道指令设定一个执行中断点。当 CS:1235 的程序码被执行时将引发中断。此时 CS:IP 所指的就是中断点设定地址。
    〔例〕 BPMW DS:F00 W EQ M 0XXX XXXX XXXX XXX1
  这道指令设定一个字组的内存写入中断点。当 DS:F00 被写入一个高位元为 0 ,低字节为 1 (其它字节不考虑)的资料时,将引发中断。
    〔例〕 BPM DS:1000 W GT 5
  这道指令设定一个字节的内存写入中断点。当 DS:1000 被写入一个大於 5 的值时,将引发中断。
        BPR  ---  对内存范围设置中断点
  语法: BPR start-adderss end-address [verb] [C=count]
        start-address 、end-address --- 界定范围的开始及结束地址
        verb --- R 、W 、RW 、T 或 TW
  解说:
        BPM 指令让你对一段内存范围设中断点。
        除了 T 和 TW 外的 verb 值均会执行引发中断的程序码。CS:IP 将指向引发中断的下一段程序码。
        你不能设定执行的范围中断点。如果想做到执行的范围中断点必需使用 R 。程序码的引出被视为是对范围中断点的读取。
        如果未指定 verb ,内定值是 W 。
        在某些状况下,设置范围中断点会降低系统的性能。Soft-ICE 将会分析所有对包括范围中断点的 4K 内存的读写动作。性能的降低通常无法察觉,但也可
    能有严重降低的例外。
        verb 值使用 T 或 TW 将在指定范围内可以做回溯追踪 (back trace) 。它们并不会真正引发中断而只是记录下程序码的资料。这个资料可以用 SHOW 或TRACE 指令显示出来。参阅第九章以取得更多有关回溯追踪的资讯。
    〔例〕 BPR B000:0 B000:1000 W
   这道指令定义一个内存范围的中断点。任何对单色影像内存的写入均会引发中断。
        BPIO  ---  对 I/O 端口存取时触发中断
  语法: BPIO port [verb] [qualifier value] [C=count]
        port --- 一个字节或字组形态的值
        verb --- R 、W 或 RW 。   R -- read ( IN )     W -- write ( OUT )
        qualifier -- EQ 、NE 、GT 、LT 、M
        EQ -- 相等     NE -- 不等     GT -- 大於
       LT -- 小於      M -- 屏蔽
        value -- 一个字节或字组形态的值
  解说:
  BPIO 指令会在 I/O 端口读写时引发中断。
  如果有指定 value 值,它将被拿来和引发中断的 IN 、OUT 程序码所读/写的真正资料值做比较。value 可以是一个字节或字组。如果是对一个字节的端口做 I/O ,则是使用较低的 8 字节来做比较。
        CS:IP 将会指向引发中断之程序码的後一段程序码。
        如未指定 verb ,内定值是 RW 。
〔例〕 BPIO 21 W NE FF
这道指令定义一个 I/O 端口存取中断点。如果一号中断控制器的屏蔽寄存器被写入除了 FFh 之外的值,将会引发中断。
    〔例〕 BPIO 3FE R EQ M 11XX XXXX
    这道指令定义一个字节的 I/O 端口读取中断点。如果 3FEh I/O 端口被读取,且这个值的二高字节是 1 时,将会引发中断。其它字节可以是任意值。
  BPINT  ---  呼叫中断时触发中断
  语法: BPINT INT-NUMBER [ < AL | AH | AX > = value] [C=count]
        int-number --- 由 0 到 FFh 的中断号码
        value --- 一个字节或字组的值
  解说:

        BPINT 指令可以在呼叫硬件中断或软件中断时引发中断。藉由指定 AX 暂存器之值可以轻易分离指定的 DOS 或 BIOS 呼叫。
        如果没有指定 value 值,在呼叫指定的中断向量时将引发中断。这个中断可以是硬件中断、软件中断或内部中断。
        选定的 value 值当中断发生时将和指定的寄存器比较 (AH 、AL 或 AX) 。如果其值和指定的寄存器值相同时,将引发中断。
        中断点引发时,如果是硬件中断,CS:IP 将指向此中断程序的第一段程序码。使用 INT? 指令可以得知此中断呼叫发生时执行到哪里。如果是软件中断,则CS:IP 将指向呼叫此中断的程序码。
    〔例〕 BPINT 21 AH=4C
  这道指令定义一个 21h 中断的中断点。当 DOS 4Ch 函式(结束程序)被呼叫时将引发中断。
        BPX  ---  设置 / 清除 执行中断点
  语法: BPX [address] [C=count]
  解说:
        BPX 指令让你在原始程序中 设置/清除 执行中断点。如果游标在程序码窗中
    ,则不需要输入地址,执行中断点将设置在目前游标所在地址。如果目前游标所
    在地址已经设置一个执行中断点,则将清除此中断点。

        如果程序码窗是不可见的或游标未在其中,则必!指定地址。如果只有指定差
    距地址,目前的 CS 值会被当做节段地址。

    〔注〕除非中断点的位置在 ROM 中,不然 BPX 均使用 INT 3 的方式设置中断点
          。用这样来取代中断点寄存器是为了能设置更多的中断点。如果你的处境
          因某些原因必需使用中断点寄存器(例如说程序码未载入),你可以用
          BPM 指令设置执行中断点。

    〔例〕 BPX .1234
          这道指令将在原始程序第 1234 行设置中断点。

        CSIP  ---  CS:IP 范围的检定判断

  语法: CSIP [OFF | [NOT] start-address end-address]

        NOT --- 如果使用 NOT ,只有当 CS:IP 所指超出范围,才会引发中断。

        OFF --- 停止对 CS:IP 的检定。

  解说:

        CSIP 指令会使中断点的成立条件由指令指标所指地址而定。这个功能在你怀
    疑程序会突然修改其范围之外的程序码时特别有用。

        当中断点条件成立时,CS:IP 寄存器会被拿来和指定的范围做比较。当其在
    范围内时会引发中断。要在 CS:IP 指在范围外时引发中断,则需要用 NOT 参数。

        如果没有加参数则会显示目前 CSIP 的范围。

IP NOT F000:0 FFFF:0
          这个指令只有在中断点条件成立且 CS:IP 并未指向 ROM BIOS 时才会引发
      中断。

        BPAND  ---  等待复合中断点的发生

  语法: BPAND list | * | OFF

        list --- 一串由逗号或空白分开的中断点号码。

        * --- 复合所有的中断点。

  解说:

        BPAND 指令会对二或多个中断点做逻辑的 AND 运算。只有当所有的中断点条
    件均成立时才会真正引发中断。

        有些情况下你会希望在许多不同条件均成立下才引发中断。BPAND 指令让你
    指定二或多个在中断发生前必需成立的中断点。这个功能让你可以设置更复杂的
    中断点条件。

        每次使用 BPAND 指令均会把指定的中断点号码加入名单中,直到使用
    BPAND OFF 指令为止。

        你可以用 BL 指令列出中断点以察看哪些中断点号码被复合在一起。被复合
    在一起的中断点其中断点号码後会有个 & 。

        一旦中断点被复合後,除非此中断点被清除或 BPAND 被关闭才会中止。

    〔例〕 BPAND 0,2,3
          这道指令将复合 0 号、2 号、3 号中断点。只有当三个的条件均成立时才
      会引发中断。例如:如果 2 号 和 3 号的条件均成立一次以上,但 0 号的条
      件尚未成立,则只有当 0 号的条件成立时才会引发中断。
    〔例〕 CS 

--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: yaoyu.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.080毫秒