我的学习的脚印 2011.6.11日--中断 IDT
声明:
内容都是书中或baidu的,很多在论坛都有出现,只是觉得有阅读和收藏整理以方便自己使用的必要。另外就是方便自己以后回头看看自己曾经走过的坎坷之路,仅此而已。
实模式
IVT: 中断向量表
从0地址开始,共256个,结构就是个地址表,每个占4字节,保存的是中断向量处理函数,存储方式仍为高高低低
2-3 Seg
0-1 offset jmp Seg:offset
Seg:offset 中断处理函数
处理步骤:
1) 把EFLAGES压栈
2) CS栈
3) IP压栈(指向中断处理结束后要执行的下一条OpCode)
4) 清楚IF和TF标志位.
5) 根据中断向量(索引)找到对应的IVT数据项
6) 报IVT中的段地址和偏移地址分别加载到CS和IP寄存器
IRET返回过程
1) 栈顶16位数值pop到IP 前面压栈对应的弹出
2) 栈顶16位数值pop到CS
3) 栈顶16位数值pop到EFLAGS
读中断信息
Int 21
AH = Dos中断功能号 0x35
AL = 中断向量
返回值放在ES:段,BX:偏移
写中断向量表
Int 21
AH = Dos中断功能号 0x25
Al = 中断向量
Push DS
DS = 要改写的段地址
DX = 要改写的Offset
Pop DS
保护模式
Idtr 中断描述表基值为的基地址
Idtrl 界限(长度)
kd> r idtr
idtr=8003f400
中断描述符表,每个表大小是8byte,因为兼容的关系处理函数地址被分割在低2byte和高2byte,共32位,16位应该就是用低16位就好了吧,哈哈。
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
