首页
社区
课程
招聘
[求助]关于修改中断向量表
发表于: 2007-7-28 23:01 9599

[求助]关于修改中断向量表

2007-7-28 23:01
9599
昨天晚上.
参考王爽的书籍,
写了那个第12章的实验
修改0号中断的中断向量和中断处理程序.
编程实现成功了,
在本程序中制造溢出后,
程序执行中断处理程序,输出“divide error!”
正常!

但是在修改程序退出后,
再次进入debug制造0号溢出中断时,
发现提示语句还是系统默认的提示语。
我就想不明白了,
我明明修改了0号中断向量以及中断处理程序,

问题1:
       为什么还会是系统的默认提示,
问题2:
        谁把这个给改回去的?
问题3:
       怎么编程才可以实现,中断向量修改程序退出后,
       修改后的中断向量以及中断处理程序不被系统改回去。

请各位朋友指点!

assume cs:code

;代码段
code segment
     ;程序入口
     start:
           ;do0安装程序
           mov ax,cs
           mov ds,ax
           mov si,offset do0
           mov ax,0
           mov es,ax
           mov di,200h
           mov cx,offset do0end-offset do0
           cld
           rep movsb
           ;设置中断向量表
           mov ax,0
           mov es,ax
           mov word ptr es:[0*4],200h
           mov word ptr es:[0*4+2],0h
           ;测试效果
           mov ax,4444h
           mov cl,1
           div cl
           ;按任意键退出
           mov ah,1
           int 21h
           ;程序返回
           mov ah,43h
           int 21h
           
           ;中断处理程序
       do0:
           jmp short do0start
           db "divide error!"
       do0start:
                push ax
                push si
                push di
                push cx
                push ds
                push es
                
                mov ax,cs
                mov ds,ax
                mov si,202h
                mov ax,0b800h
                mov es,ax
                mov di,11*160+30*2
                
                mov cx,13
              s:
                mov al,[si]
                mov es:[di],al
                mov byte ptr es:[di+1],42h
                inc si
                add di,2
                loop s

                pop es
                pop ds
                pop cx
                pop di
                pop si
                pop ax
           ;中断处理程序返回
           iret
    do0end:nop
code ends

end start

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
2
继续等待!~~~~~~```
2007-7-30 04:39
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
先运行cmd,不要退出这个cmd,要保持在这同一个cmd下操作
2007-7-30 09:08
0
雪    币: 214
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
(废话一下,我曾经挂钩过1ch)
/////////////////////////////////
1.
中断处理部分应该没错..
只不过div cl之后进入中断,然后iret又返回div cl,又进入中断..........无穷循环

2.
网上有许多TSR的资料.可以供写驻留参考
如果更深入就要去查dos内存管理的书籍了.dos中每块内存都有一个专门的数据结构,其中有一个变量表明这块内存属于那个程序.....以前也没深入写,楼主自己查查吧

3.
想问个问题:

壹群老虎是楼主的大米吗?
2007-7-30 09:24
0
雪    币: 214
活跃值: (11)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
至少在vista下debug运行到div cl再t是会出现结果的,如果cmd下运行就卡住了,像死机一样

再仔细一看,原来是iret返回到div cl,而不是div cl的后一句
2007-7-30 09:27
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
貌似LZ不是32位的代码啊...
2007-7-30 13:00
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
7
这个我知道的,谢谢你!
我现在的目标就是本程序执行一次退出后,

另外的程序如果发生除法溢出。可以调用我的这个中断处理程序!
不知道现实么?
2007-7-31 09:08
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
8
无限循环这里不存在的,我看了书上的资料,考虑了的,
另外,壹群老虎是我朋友,嗬嗬,不是我!
2007-7-31 09:10
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
9
还在学习16位滴!
2007-7-31 09:11
0
游客
登录 | 注册 方可回帖
返回
//