保护模式的学习
来源:互联网 发布:kali linux wifi 劫持 编辑:程序博客网 时间:2024/05/09 16:35
nasm语言中描述符可以使用宏%macro来赋值
%macro的使用方法如下
%macro为多行宏用法与单行宏%define相对应
%macro宏已%macro符位开始已%endmacro符号结束
%macro 后接宏的名称、名称后面接宏的传入参数个数
例如 %macro demo 2 这一行声明了demo为宏的名称 有两个传入参数
其中每个传入参数使用%加计数索引来表示(从1开始,例如%1表示第一个传入参数)
GDT(Global Descriptor Table)全局描述符表
它由64位2进制码组成
(63-56位)段基址2存放段基址的31-24位
(55位)G位段界限粒度位。G=0时段界限粒度为字节;G=1段界限粒度位4KB
(54位)D/B位分为三种情况
<1>在可执行代码描述符中,这一位叫D位。D=1时在默认情况下指令使用32位地址及32或8位操作数;
D=0时,在默认情况下使用下使用16位地址及16位或8位操作数
<2>在向下扩展数据段的描述符中,这一位叫做B位。B=1时,段的上部界限为4G;B=0时,段的上半部界限为64K
<3>在描述堆栈段(由SS寄存器指向的段)的描述符中,这一位叫做B位。B=1时,隐式的堆栈访问指令(如push、
pop和call)使用32位堆栈指针寄存器esp;B=0时,隐式的堆栈访问指令(如push、pop和call)使用16位堆栈指针寄存器sp
(53位)为0
(52位)AVL为保留为,可以被系统软件使用。
(51-48位)存放段界限的19-16位
(47位)P位存在位。P=1表示段在内存中存在;P=0表示段在内存中不存在。
(46-45位)DPL描述符特权级。特权级可以是0、1、2、3.数字越小特权级越大。
(44位)S位指明描述符是数据段/代码段描述符(S=1)还是系统段/门描述符(S=0)。
(43-40位)TYPE描述符类型
(39-16位)段基址的23-0位
(15-0位)段界限15-0位
这里使用宏Descriptor为GDT赋值
_________________________________________________________________________________________________________________________________________
伪指令dw、db与dd
db 为1字节
dw 为2字节
dd 为4字节
_________________________________________________________________________________________________________________________________________
在为GDT初始化时如 段基址 段界限 属性
LABEL_DESC_VIDEO: Descriptor 0B8000h, 0ffffh, 92h的初始化过程如下
%macro Descriptor 3
dw %2 & 0ffffh ;设置段界限为0ffffh
dw %1 & 0ffffh ;设置段基址前16位08000h
db (%1 >> 16) & 0ffh ;设置段基址的23-16位为0Bh、即段基址为0B8000h
dw ((%2 >> 8) & 0f00h) | (%3 & 0f0ffh) ;其中前半部分0ffh&0f00h位0h后半部分92h、即结果为0092h 2进制代码为 10010010
段界限粒度为字节、段的上部界限为64k、描述符在段内存中存在、描述符特权级为0(最大)、数据段/代码段描述符、具有读写的权限
db (%1 >> 24) & 0ffh ;设置段基址2部分位00h
%endmacro
LDT(Local Descriptor Table)局部描述符表
而LDT的结构和赋值方式是与GDT相同的
IDT(Interrupt Descriptor Table)中断描述符表
IDT使用门描述符赋值
门描述符同样由64位组成
(63-48位)偏移的31-16位
(47位)P位存在位。P=1表示段在内存中存在;P=0表示段在内存中不存在。
(46-45位)DPL描述符特权级。特权级可以是0、1、2、3.数字越小特权级越大。
(44位)S位指明描述符是数据段/代码段描述符(S=1)还是系统段/门描述符(S=0)。
(43-40位)TYPE描述符类型
(39-37位)永远为0
(36-32位)Dcount的4-0位
(31-16)选择子15-0位
(15-0)偏移的15-0位
IDT的初始化时如
LABEL_IDT:
;门
%rep 255 目标选择子 偏移 DCount 属性
Gate SelectorCode32 SpuriousHandler 0 DA_386IGate
%endrep
%macro Gate 4
dw (%2 & 0ffffh) SpuriousHandler
dw %1 SelectorCode32
dw (%3 & 1fh) | ((%4 << 8) & 0ff00h) 8Eh << 8 & 0ff00h => 08E00h
段在内存中、0优先级最高、门描述符、执行/读、一致码段、DCount=0
dw ((%2 >> 16) & 0ffffh) SpuriousHandler >> 16 & 0ffffh
- 保护模式的学习
- 保护模式的进入
- 保护模式的进入
- 一个不错的学习保护模式的网站
- 【学习】【保护模式编程、一】
- 【学习】【保护模式编程、二】
- 【学习】【保护模式编程、三】
- 【学习】【保护模式编程、四】
- 【学习】【保护模式编程、五】
- 【学习】【保护模式编程、六】
- 【学习】【保护模式编程、七】
- 【学习】【保护模式编程、八】
- 【学习】【保护模式编程、九】
- Intel 保护模式学习总结
- 保护模式学习笔记:GDT
- 保护模式学习笔记:LDT
- 保护模式学习笔记:IDT
- 保护模式 学习笔记--LDT
- Android访问剪切板
- 特征选择与特征权重区别
- 有限状态机和动态规划——地图和本地搜索基本技术
- Linux文件系统-文件权限的含义及修改方法
- JAVA中使用FTPClient上传下载
- 保护模式的学习
- Android 电话呼入流程
- 说养鱼
- webservice(八)在web服务中加入header(基于JAXWS-RI的方法)
- C# .net 时间格式化
- C文件读写(转载)
- 开机启动,去屏幕锁
- linux中关于防火墙
- V4L2深入理解