社区
汇编语言
帖子详情
修改int 13h的中断向量后如何返回
wsnake
2007-04-23 09:34:15
我在汇编程序中将int 13h的中断向量修改后,在执行了新的中断程序后,如何让程序返回原来的中断向量继续执行?
...全文
436
13
打赏
收藏
修改int 13h的中断向量后如何返回
我在汇编程序中将int 13h的中断向量修改后,在执行了新的中断程序后,如何让程序返回原来的中断向量继续执行?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
paullbm
2007-04-24
打赏
举报
回复
;將7C00開始的512B內容移到0600處
;即將7C00開始處512B內容備份
;可將此段代碼放至‘;保存原来的13h中断向量’處
xor ax,ax
mov ds,ax
mov es,ax
mov si,7c00h
mov di,600h
mov cx,200h
cld
rep movsb
;將7C00開始處512B內容還原
;可將此段代碼放至mov ax,4ch指令之前
xor ax,ax
mov ds,ax
mov es,ax
mov di,7c00h
mov si,600h
mov cx,200h
cld
rep movsb
paullbm
2007-04-23
打赏
举报
回复
哦。上述的13改为13h
paullbm
2007-04-23
打赏
举报
回复
mov ax,0
mov es,ax
push es:[13*4]
pop es:[200h]
push es:[13*4+2]
pop es:[202h] ;保存原中断向量在200h处的双字单元中
cli ;屏蔽中断
mov word ptr es:[13*4],204h
mov word ptr es:[13*4+2],0 ;设置自定义的中断向量
sti ;允许中断
;要还原原中断向量时就去取200h处的双字内存单元
;举了个例子,你自己参考一下。注意存放中断向量的内存单元!!
paullbm
2007-04-23
打赏
举报
回复
如果在 ;读取0柱面0磁道2扇区的内容到7C00h
的那一段代码中将mov dx,0080h换成mov dx,0
也就是读取软盘(最好是一个DOS启动盘)效果更明显!!!
记得读软盘时要插入进去哦!!
paullbm
2007-04-23
打赏
举报
回复
帮你改了下程序,如下:
stack segment
db 128 dup(0)
stack ends
code segment
assume cs:code,ss:stack
start: mov ax,stack
mov ss,ax
mov sp,128 ;设置堆栈
;为安装自定义中断例程做准备
mov ax,cs
mov ds,ax
mov ax,0
mov es,ax
;设置串传送的源地址、目的地址及长度及方向(为正)
mov si,offset int13h
mov di,204h
mov cx,offset int13hend-offset int13h
cld
rep movsb
;保存原来的13h中断向量
push es:[13h*4]
pop es:[200h]
push es:[13h*4+2]
pop es:[202h]
cli
;设置自定义13h中断向量
mov word ptr es:[13h*4],204h
mov word ptr es:[13h*4+2],0
sti
;读取0柱面0磁道2扇区的内容到7C00h
mov ax,0201h
mov cx,0002h
mov dx,0080h
xor bx,bx
mov es,bx
mov bx,7c00h ;es:bx==0:7c00
int 13h ;调用自定义13h中断
mov ah,4ch
int 21h
int13h: 自定义13h中断
push cx
push dx
pushf
cmp ch,0 ;是否在0道
jnz int13ret
cmp dh,0 ;是否在0面
jnz int13ret
cmp cl,2 ;是否在起始扇区号为2的扇区处
jnz int13ret
cmp ah,2 ;是否是读操作
jnz int13ret
call dword ptr cs:[200h] ;调用原始的13h中断(原始中断自带返回)
int13ret:
pop dx
pop cx
iret ;返回
int13hend:
nop
code ends
end start
==================说明:
程序运行时会出现一个提示“应用程序已试着直接访问硬盘”提示对话框,点“忽略”即可!
读取的内容自己可以去DEBUG查看!!!
wsnake
2007-04-23
打赏
举报
回复
code segment
assume cs:code
start:
;初始化代码
xor ax,ax
mov ss,ax
mov sp,7c00h
mov es,ax
mov ds,ax
;;;;;;;;;;;;;;;;;;;
sti
cld
;将7C00开始的内容移到0600处
mov si,7c00h
mov di,0600h
mov cx,0200h
repz movsb
;执行Startload
xor ax,ax
push ax
mov ax,offset startload+0600h
push ax
retf
;;;;;;;;;;;;;;;;;;;
startload:
;读取0柱面0磁道2扇区的内容到7C00
mov ax,0201h
mov cx,0002h
mov dx,0080h
mov bx,0000h
mov es,bx
mov bx,7c00h
int 13h
;抢先截获int 13h的中断向量地址,放到07fah和07fch中
mov ax,ds:[004ch]
mov ds:[07fah],ax
mov ax,ds:[004eh]
mov ds:[07fch],ax
;计算新的中断向量地址,并改写int 13h的中断向量地址
mov ax,ds:[0413h]
dec ax
mov ds:[0413h],ax
mov cl,06h
shl ax,cl
mov es,ax
xor ax,ax
mov ds,ax
mov si,offset exchange+0600h
mov di,0000h
mov cx,0050h
repz movsb
mov ax,0000h
mov ds:[004ch],ax
mov ax,es
mov ds:[004eh],ax
;返回7c00处继续执行
xor ax,ax
push ax
mov ax,7c00h
push ax
retf
exchange:
;自己的中断处理程序,判断是否读0柱面0磁道1扇区,如果是,则读0柱面0磁道2扇区
pushf
cmp dx,0080h
jnz A0167
cmp cx,+01h
jnz A0167
mov cx,0002h
A0167 : popf
;跳转执行旧的int 13h程序
push ds:[07fah]
push ds:[07fch]
retf
code ends
end start
paullbm
2007-04-23
打赏
举报
回复
不加注釋沒時間看!!
wsnake
2007-04-23
打赏
举报
回复
code segment
assume cs:code
start:
xor ax,ax
mov ss,ax
mov sp,7c00h
mov es,ax
mov ds,ax
;;;;;;;;;;;;;;;;;;;
sti
cld
mov si,7c00h
mov di,0600h
mov cx,0200h
repz movsb
xor ax,ax
push ax
mov ax,offset startload+0600h
push ax
retf
;;;;;;;;;;;;;;;;;;;
startload:
mov ax,0201h
mov cx,0002h
mov dx,0080h
mov bx,0000h
mov es,bx
mov bx,7c00h
int 13h
mov ax,ds:[004ch]
mov ds:[03fah],ax
mov ax,ds:[004eh]
mov ds:[03fch],ax
mov ax,ds:[0413h]
dec ax
mov ds:[0413h],ax
mov cl,06h
shl ax,cl
mov es,ax
xor ax,ax
mov ds,ax
mov si,offset exchange+0600h
mov di,0000h
mov cx,0050h
repz movsb
mov ax,0000h
mov ds:[004ch],ax
mov ax,es
mov ds:[004eh],ax
;mov ax,0301h
;mov cx,0001h
;mov dx,0080h
;mov bx,0000h
;mov es,bx
;mov bx,7c00h
;int 13h
;;;;;;;;;;;;;;;;;;;
;MOV SI,BP
;DB 0EAH,0,7CH,0,0 ;JMP 0000:7C00h
;mov cx,0001h
xor ax,ax
push ax
mov ax,7c00h
push ax
retf
exchange:
pushf
cmp dx,0080h
jnz A0167
cmp cx,+01h
jnz A0167
mov cx,0002h
A0167 : popf
push ds:[03fah]
push ds:[03fch]
retf
code ends
end start
paullbm
2007-04-23
打赏
举报
回复
建議你把全部代碼貼出來,并且記得加注釋。。。
wsnake
2007-04-23
打赏
举报
回复
这是我的程序,帮忙看一下那里不对,执行后没有效果,好像没有返回到原来的中断向量的地址。
mov ax,ds:[004ch]
mov ds:[03fah],ax
mov ax,ds:[004eh]
mov ds:[03fch],ax
mov ax,ds:[0413h]
dec ax
mov ds:[0413h],ax
mov cl,06h
shl ax,cl
mov es,ax
xor ax,ax
mov ds,ax
mov si,offset exchange+0600h
mov di,0000h
mov cx,0050h
repz movsb
mov ax,0000h
mov ds:[004ch],ax
mov ax,es
mov ds:[004eh],ax
;mov ax,0301h
;mov cx,0001h
;mov dx,0080h
;mov bx,0000h
;mov es,bx
;mov bx,7c00h
;int 13h
;;;;;;;;;;;;;;;;;;;
;MOV SI,BP
;DB 0EAH,0,7CH,0,0 ;JMP 0000:7C00h
;mov cx,0001h
xor ax,ax
push ax
mov ax,7c00h
push ax
retf
exchange:
cli
pushf
cmp dx,0080h
jnz A0167
cmp ax,0201h
jnz A0167
cmp cx,+01h
jnz A0167
mov cx,0002h
A0167 : popf
sti
push ds:[03fah]
push ds:[03fch]
retf
paullbm
2007-04-23
打赏
举报
回复
你在修改int 13h的中断向量時應該先將它的入口地址保存起來(最好是保存至堆棧中),在程序使用完自己所修改的13號中斷後。再將先前本身的13號中斷的入口地址恢復就OK了!
日立奔腾浪潮微软松下联想
2007-04-23
打赏
举报
回复
startload:
;读取0柱面0磁道2扇区的内容到7C00
mov ax,0201h
mov cx,0002h
mov dx,0080h
mov bx,0000h
mov es,bx
mov bx,7c00h
int 13h
这儿都把0000:7c00覆盖了,还怎么返回呀?:)
wsnake
2007-04-23
打赏
举报
回复
修改没有问题,主要是修改以后返回时的问题
【硬核安全】引导型病毒核心 BIOS 中断
INT
13H
完整功能参数、读写扇区调用规范与底层攻防实战
本文深入剖析x86实模式下BIOS中断
INT
13H
的核心机制,涵盖CHS/LBA寻址、读写扇区(AH=02H/03H)调用规范、磁盘地址包(DAP)、
中断向量
表(IVT)劫持技术,以及引导型病毒利用
INT
13H
实现MBR感染、内存驻留与隐形拦截的完整攻防链。同时分析扩展功能(AH=41H/42H)、常见错误码、DMA边界限制、UEFI对
INT
13H
的废弃及Secure Boot防御原理。
中断
INT
21H
本文详细探讨了DOS系统中
INT
21H中断的作用和使用,涉及磁盘操作、C语言编程接口及电话拨号等功能。通过实例解析了
INT
21H在存储管理和通信方面的应用。
INT
21H 功能表。
本文详细介绍了
INT
21H在DOS系统中的各种功能,包括磁盘操作、文件管理、输入输出等。通过C语言调用
INT
21H中断,可以实现基本的DOS程序设计。此外,还探讨了
INT
21H如何用于模拟电话拨号和存储管理。
INT
21H 指令说明及使用方法
本文详细解析了DOS系统中的
INT
21H指令,包括其功能调用、调用参数及
返回
参数,覆盖从基本的键盘输入到复杂的文件操作等各项功能。
BIOS
中断向量
表
本文详细介绍了BIOS
中断向量
表中的各项中断及其功能,包括常见的键盘、显示服务等中断,以及磁盘操作、实时钟服务等系统级中断。通过本文,读者可以深入了解BIOS如何管理和响应各种硬件中断。
汇编语言
21,500
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章