`
omygege
  • 浏览: 1356476 次
文章分类
社区版块
存档分类
最新评论

IA-32架构保护模式

 
阅读更多

GDT和LDT描述符(段描述符):
struct Segment_Descriptor
{
ushort segment_limit_lo : 16;
uint23 segment_base_lo : 24;
uint4 type : 4;
uint1 desc_type : 1;
uint2 dpl : 2;
uint1 present: 1;
uint4 segment_limit_hi : 4;
uint1 unknown_avl_bit : 1;
uint1 reserved: 1; // always 0
uint1 d_bit : 1;
uint1 granularity : 1;
};

Present位表示当前段描述符对段寻址是否有效。如无效则在使用该描述符时会产生异常。
Granularity粒度位决定界限粒度采用字节(G=0)或采用4K字节(G=1)。

IDT描述符:
struct IDT_Gate
{
ushort entry_offset_lo : 16;
ushort seg_selector : 16;

union
{
struct// in case (type == 0b01110 || type == 0b01111)
{
uint4 unknown1 : 5;
uint3 unknown2 : 3;
};
uchar unknown: 8;// in case (type == 0b00101)
};

uint5 type : 5;
uint2 dpl : 2;
uint1 present: 1;
ushort entry_offset_hi : 16;
};
当type为0b01110时为中断门(Interrupt Gate);当type为0b01111时为陷阱门(Trap Gate);当type为0b00101时为任务门(Task Gate)。
其中present为段存在标志,如果为0,则访问该中断向量会引起异常。dpl为描述符特权级(用于IA-32的保护模式特权检查)。
中断或异常处理时,首先得到中断向量(从系统总线或内部得到的中断号),然后硬件根据IDTR寄存器中提供的偏移找到主存中的IDT表,再根据表中中断向量指定的项指示的选择符,从GDT表或LDT表中找出段基地址(一般是内核或用户代码段的基地址),通过和上述IDT表项指示的偏移值相加,得到中断或异常处理过程的入口的线性地址。从而完成了中断处理程序的段寻址。

分享到:
评论

相关推荐

    IA-32架构汇编语言程序设计

    IA-32架构汇编语言程序设计课件,在32位保护模式下编写汇编语言代码。熟悉掌握操作系统

    IA-32架构汇编语言程序设计第六章

    IA-32架构汇编语言程序设计课件,在32位保护模式下编写汇编语言代码。熟悉掌握操作系统

    2014 英特尔® 64 和 IA-32 架构软件开发人员手册合并版

    介绍英特尔 64 和 iA-32 架构的操作系统支持环境,其中包括:内存管理、保护、任务管理、中断和异常处理、多处理器支持、散热和电源管理特性、调试、性能监控、系统管理模式、 VMX 指令,和英特尔® 虚拟化技术。

    IA-32卷3系统编程指南

    intel 开发手册第三卷的中文版 OS编程必看的一本书 强烈推荐第三卷:系统编程指南第一章 导读第二章 系统架构概况第三章 保护模式内存管理第四章 保护第五章 中断和异常处理第六章 任务管理第七章 多处理器管理第八...

    x86汇编语言-从实模式到保护模式

    高清文字版,第14-17章从略。这本书是国内少有的通俗讲解汇编和操作系统的书籍,十分值得一看。可以同时查阅英特尔IA-32架构开发者手册,底层的架构设计细节都能在里面查到。

    intel开发手册 共10卷 更新至2024.03.31最新版

    描述 英特尔 64 和 IA-32 体系结构的操作系统支持环境,包括:内存管理、保护、任务管理、中断和异常处理、多处理器支持、散热和电源管理功能、调试、性能监控、系统管理模式、虚拟机扩展 (VMX) 指令、英特尔 虚拟...

    cpu-internals:英特尔AMD CPU内部

    CPU内部这些说明摘自Intel SDM。 您可以将它们视为手册中某些部分的简短版本,在学习系统编程,OS内部结构或虚拟化时,我认为这些部分值得参考。内容第24章虚拟机控制结构第25章VMX非根... 英特尔64架构增加了IA-32e

    Windows内核安全与驱动开发光盘源码

    2.6.4 WDK中出现的特殊代码 32 第3章 字符串与链表 35 3.1 字符串操作 35 3.1.1 使用字符串结构 35 3.1.2 字符串的初始化 36 3.1.3 字符串的拷贝 37 3.1.4 字符串的连接 38 3.1.5 字符串的打印 38 3.2 内存...

    Windows内核安全驱动开发(随书光盘)

    2.6.4 WDK中出现的特殊代码 32 第3章 字符串与链表 35 3.1 字符串操作 35 3.1.1 使用字符串结构 35 3.1.2 字符串的初始化 36 3.1.3 字符串的拷贝 37 3.1.4 字符串的连接 38 3.1.5 字符串的打印 38 3.2 内存...

    486:这是“第一次阅读486”的示例程序集合。

    “第一次阅读486”(以下简称“本书”)是一本解释Intel x86的IA32体系结构的书,主要介绍了受保护模式下的OS支持功能。 IA32架构从一开始就非常完美,并且与当今的CPU完全兼容。因此,您可以通过按原样执行基本...

    Reversing:逆向工程揭密

    13.7 Real-World IA-32反编译 477 13.8 结论 477 附录A 揭密代码结构 479 附录B 理解编译后的算术运算 519 附录C 破译程序数据 537 索引 561 译 者 序 记得第一次做与逆向有关的工作是2000年,当时由于项目的需要,...

    Linux2.6内核标准教程(共计8-- 第1个)

    2.2.4 进入保护模式 40 2.2.5 系统最终初始化 47 2.3 系统引导过程总结 47 第3章 内存管理 50 3.1 基础知识 51 3.1.1 存储器地址 51 3.1.2 分段机制 52 3.1.3 分页机制 59 3.2 内核页表的初始化...

    Linux2.6内核标准教程(共计8--第6个)

    2.2.4 进入保护模式 40 2.2.5 系统最终初始化 47 2.3 系统引导过程总结 47 第3章 内存管理 50 3.1 基础知识 51 3.1.1 存储器地址 51 3.1.2 分段机制 52 3.1.3 分页机制 59 3.2 内核页表的初始化...

    Linux2.6内核标准教程(共计8--第3个)

    2.2.4 进入保护模式 40 2.2.5 系统最终初始化 47 2.3 系统引导过程总结 47 第3章 内存管理 50 3.1 基础知识 51 3.1.1 存储器地址 51 3.1.2 分段机制 52 3.1.3 分页机制 59 3.2 内核页表的初始化...

    Linux2.6内核标准教程(共计8--第4个)

    2.2.4 进入保护模式 40 2.2.5 系统最终初始化 47 2.3 系统引导过程总结 47 第3章 内存管理 50 3.1 基础知识 51 3.1.1 存储器地址 51 3.1.2 分段机制 52 3.1.3 分页机制 59 3.2 内核页表的初始化...

    Linux2.6内核标准教程(共计8--第2个)

    2.2.4 进入保护模式 40 2.2.5 系统最终初始化 47 2.3 系统引导过程总结 47 第3章 内存管理 50 3.1 基础知识 51 3.1.1 存储器地址 51 3.1.2 分段机制 52 3.1.3 分页机制 59 3.2 内核页表的初始化...

    Linux2.6内核标准教程(共计8--第7个)

    2.2.4 进入保护模式 40 2.2.5 系统最终初始化 47 2.3 系统引导过程总结 47 第3章 内存管理 50 3.1 基础知识 51 3.1.1 存储器地址 51 3.1.2 分段机制 52 3.1.3 分页机制 59 3.2 内核页表的初始化...

    Linux2.6内核标准教程(共计8--第5个)

    2.2.4 进入保护模式 40 2.2.5 系统最终初始化 47 2.3 系统引导过程总结 47 第3章 内存管理 50 3.1 基础知识 51 3.1.1 存储器地址 51 3.1.2 分段机制 52 3.1.3 分页机制 59 3.2 内核页表的初始化...

Global site tag (gtag.js) - Google Analytics