小白100000000 发表于 2019-5-20 19:51:47

关于int9号中断程序的改写

15章要求我们改写int9号中断,我觉得把它写完放进一段内存里面,然后把中断向量表的地址入口改成我们写的那个程序的地址,然后在int9
不就行了么,我在学习内中断的时候视频就是那么教的,可是视频却说不能直接int9去调用那个程序,说是中断向量表不是原来的地址,但是我想这有什么
影响,它检测到9号中段类型码不就去向量表里找我们改写好的地址么,怎么不能执行

人造人 发表于 2019-5-20 21:51:07

用代码说明你的问题

小白100000000 发表于 2019-5-21 10:52:34

我不会写那个代码,其实我想写一个松开a键之后屏幕就全是a,不是要安装,就是临时替换一下那个int9号中断不用在纯doa环境下就能执行,求个代码

人造人 发表于 2019-5-24 18:26:00

小白100000000 发表于 2019-5-21 10:52
我不会写那个代码,其实我想写一个松开a键之后屏幕就全是a,不是要安装,就是临时替换一下那个int9号中断不 ...

assume cs:code, ds:data

stack segment
        db        1024 dup(0)
stack ends

data segment
old_int9:
                dw 0, 0
flag:
                db 0
data ends

code segment
start:
        mov        ax, stack
        mov        ss, ax
        mov        sp, 1024
        mov        ax, data
        mov        ds, ax
        xor        ax, ax
        mov        es, ax
       
        cli
        push        word ptr es:
        push        word ptr es:
        pop        word ptr
        pop        word ptr
       
        mov        ax, offset new_int9
        push        ax
        push        cs
        pop        word ptr es:
        pop        word ptr es:
        sti
@@:
        cmp        byte ptr , 0
        je        @B
       
        push        es
        mov        ax, 0b800h
        mov        es, ax
        xor        di, di
        mov        cx, 2000
        mov        ax, 0761h
        rep        stosw
        pop        es
       
        cli
        push        word ptr
        push        word ptr
        pop        word ptr es:
        pop        word ptr es:
        sti
       
        mov        ax, 4c00h
        int        21h
       
new_int9:
        push        ax
       
        in        al, 60h
        cmp        al, 9eh
        jne        @F
        or        byte ptr , 1
@@:
        pushf
        call        dword ptr
       
        pop        ax
        iret
       
code ends
end start
页: [1]
查看完整版本: 关于int9号中断程序的改写