利用DEBUG进行系统的单步实时跟踪

Author: Date: 1994-11-04

        大家都知道,状态寄存器中有一位是陷井标志位TF,当TF被置位时,如果进行指令跟踪,就产生单步中断。我们利用这一特点,在软件执行程序的任何时候,只要使TF标志位置位即可使程序进入单步监视状态,使应用程序被有效地进行跟踪。
        本文给出修改中断调用INTO9H的方法判断DOS通讯区0040:0017H(左SHIFT键+右SHIFT键+CTRL键同时按下),如果是则将TF标志单元置1进入单步监视状态,否则进行正常工作处理。本程序采用COM格式文件编制,只要在用DEBUG调试应用程序前运行一下该程序,在需要时同时按下左SHIFT键+右SHIFT键+CTRL键,即可实现在DEBUG状态下连续单步监视应用软件。
        ;TINT.ASM程序清单:
        code segment
        org 100h
        assume sc:code,ds:code
        begin: jmp start
        int9   dd 0000h
        int9h  proc far
        pushf  ; 完成原来中断调用功能
        call dword ptr cs:int9
        push ax; 保存当前寄存器状态
        push bx
        push cx
        push dx
        push di
        push si
        push ds
        push es
        cli
        mov ax,0040h
        mov ds,ax
        mov bx,0017h
        mov al,[bx]
        and al,07h
        cmp al,07h
        jne int9end
        pushf
        pop ax
        or ax,0100h ;TF标志位置位
        push ax
        popf
        int9end:sti
        pop es
        pop ds
        pop si
         pop di
         pop dx
         pop cx
         pop bx
        pop ax
         iret
         int9hendp
        start:push cs
        pop ds
        mov ax,3509h ;修改中断INT 09H
        int 21h
        mov word ptr int9[0],bx
        mov word ptr int9[2],es
        mov ax,2509h
        mov dx,offset int9h
        int 21h
        mov dx,offset start
        add dx,000fh
        mov cl,04h
        shr dx,cl
        mov ax,3100h
        int 21h
        code ends
        end begin