
保护模式
文章平均质量分 52
My classmates
QQ349561280
展开
-
1.段描述符与段选择子
80386中段寄存器分别有: ES CS SS DS FS GS LDTR TR共96位,其中有16位是可见的,80不可见 至于为什么是96位下面有讲结构体表示:Struct Segment{ Word selecter 可见部分 Word Atrributes 属性,可读可写可执行 DW...原创 2018-08-12 21:54:18 · 870 阅读 · 0 评论 -
17.TLB
我们只想读4个字节,但我们要经过如下的步骤读取 4 字节的PDE读取 4 字节的 PTE读取 4 字节(int 占用4字节)的物理内存在 10-10-12 分页模式下,CPU 每次要访问额外的访问 8 字节内存数据才能读取到数据读取 8 字节 PDPTE读取 8 字节 PDE读取 8 字节 PTE读取 4 字节的物理内存在2-9-9-12 分页模式下,需要额外的访问 24 字...转载 2018-10-15 12:12:33 · 243 阅读 · 0 评论 -
18.中断与异常
什么是中断中断通常是由CPU外部的输入输出设备(硬件)所触发的,供外部设通知 CPU"有事情需要处理”,因此又叫中断请求(InterruptRequest).中断请求的目的是希望CPU暂时停止执行当前正在执行的程序,转去执行中断请求所对应的中断处理例程(中断处理程序在哪有IDT表决定)80x86有两条中断请求线:不可屏蔽中断线,称为NMI (NonMaskable Interrupt)...原创 2018-10-15 17:36:58 · 408 阅读 · 0 评论 -
19.控制寄存器
控制寄存器用于控制和确定CPU的操作模式。CrO Cr1 Cr2 Cr3 Cr4Cr1保留Cr3页目录表基址CR0说明:PE: CRO的位0是启用保护(ProtectionEnable)标志。PE-1保护模式PE-0实地址模式这个标志仅开启段级保护,而并没有启用分页机制。若要启用分页机制,那么PE和PG标志都要置位。PG:当设置该位时即开启了分页机制。在开启这个标志之前必须已经或...原创 2018-10-15 19:31:02 · 2185 阅读 · 0 评论 -
20. PWT、PCD(填坑篇)
CPU缓存:CPU缓存是位于CPU与物理内存之间的临时存储器,它的容量比内存小的多但是交换速度(也就是读写速度)却比内存要快得多。CPU缓存可以做的很大,有几K、几十K、几百K甚至上M的也有。CPU缓存与TLB的区别:TLB:线性地址<——>物理地址CPU缓存:物理地址<——>内容具体参考白皮书关于PWT/PCD属性PWT: Page Write ...原创 2018-10-15 21:14:16 · 856 阅读 · 0 评论 -
21.分享篇
保护模式还有很多的细节,参考白皮书第3卷,下面是翻译版的链接链接:https://pan.baidu.com/s/13C2Lh8iKoiM05P_5TQbPPg提取码:05wd并不完整,保护模式从第三章看到第十一章就可以了...原创 2018-10-15 21:29:22 · 257 阅读 · 0 评论 -
3.段描述符属性
//结构体表示:Struct Segment{ Word selecter //可见部分 Word Atrributes //属性,可读可写可执行 高8~23位 DWORD Base //当前段从哪开始 粉红色部分 DWORD LinIT //当前段整个有多长 浅蓝色部分} -------------------------------...原创 2018-10-10 00:04:18 · 1511 阅读 · 0 评论 -
4.代码跨段跳转
代码的跨段就是修改CS段寄存器段寄存器:ES,CS,SS,DS,FS,GS,LDTR,TR段寄存器读写:除CS外,其他的段寄存器都可以通过 MOV,LES,LSS,LDS,LFS,LGS指令进行修改CS的改变意味着EIP的改变,改变CS的同时必须修改EIP,所以我们无法使用上面的指令来进行修改.同时修改CS与EIP的指令.JMP FAR /CALL FAR /RETF /INT/IRE...原创 2018-10-10 16:55:41 · 570 阅读 · 0 评论 -
5.长调用与短调用
我们通过JMP FAR可以实现段间的跳转,如果要实现跨段的调用就必须要学习CALL FAR,也就是长调用.CALL FAR比JMP FAR要复杂, JMP并不影响堆栈但CALL指令会影响.长调用会先将调用者cs压栈,再将返回地址压栈,esp+8随者权限的变化堆栈就会切换总结:1跨段调用时,一日有权限切换,就会切换堆栈.2CS的权限一旦改变, SS的权限也要随着改变, CS与SS...原创 2018-10-10 20:21:06 · 1100 阅读 · 0 评论 -
16.PAE分页实验
下面我们通过线性地址来找到物理地址将他拆分0000 0000 0000 1010 11100x798乘8(每个项8字节)000x5700x798PTE的值是:8000000 0`14c1a 067低12位仍然是属性,唯一的区别就是,Page Base Address 由原来的 20 位变成了现在的 24 位,相对以前扩展了 4 位。36-63 位这28位是保留...原创 2018-10-14 21:43:32 · 687 阅读 · 0 评论 -
15.PAE分页(2-9-9-12)
10-10-12分页方式,在这种分页方式下物理地址最多可达4GB。但随着硬件发展, 4GB的物理地址范围已经无法满 足要求Intel在1996年就已经意识到这个问题了,所以设计了新的分页方式.2-9-9-12分页,又称为PAE (物理地址扩展)分页.页的大小是确定的, 4KB不能随便改,所以12确定了如果想增大物理内存的访问范围,就需要增大PTE,增大多少还要考虑对齐的因素,增加到...原创 2018-10-14 20:49:08 · 1620 阅读 · 0 评论 -
14.PTD与的基址
0xC0300000就是页目录的基址。随便找一个软件测试下总结:通过0xC0300000找到的物理页就是页目录表这个物理页即是页目录表本身也是页表页目录表是一张特殊的页表,每一项PTE指向的不是普通的物理页,而是指向其他的页表.如果我们要访问第N个PDE, 那么有如下公式:0xc0300000+N*4...原创 2018-10-14 09:46:22 · 470 阅读 · 0 评论 -
2.探测段寄存器
上面的值每台电脑都可能不一样 程序正常运行证明它确实是可读写的把他换成cs后就出现异常了 下面这段代码证明fs的Base是存在的 Limit,要减3字节 写段寄存值给16位可见部分剩下80位从GDT来...原创 2018-08-13 13:14:36 · 385 阅读 · 0 评论 -
7.中断门
Windows没有使用调用门,但是使用了中断门:&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;1&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;系统调用老的CPU调用一些api从r3进入r0,就是通过中断门,新的都是快速调用了&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;2&amp;amp;amp;amp;amp;amp;amp;am原创 2018-10-11 16:00:44 · 596 阅读 · 0 评论 -
8.陷阱门
别的地方都和中断门一样,只有矩形处陷阱门的测试代码与中段门一样中断门的代码执行时,将IF位清零,但陷阱门不会。陷阱门对 EFLAGS 的影响进入中断门,CPU会把EFLAGS中的IF位置清0,而进入陷阱门,CPU并不修改 IF 位。...原创 2018-10-11 17:32:22 · 989 阅读 · 0 评论 -
9.任务段(TSS)
在调用门、中断门与陷阱门中,一旦出现权限切换,那么就会有堆栈的 ,切换。而且,由于CS的CPL发生改变,也导致了SS也必须要切换。切换时,会有新的ESP和SS(CS是由中断门或者调用门指定)这2个值从哪里来的呢?答案: TSS (Task-state segment ),任务状态段TSS就是一块内存,大小104个节不要把TSS与任务切换联系到一起TSS的意义就在于可以同时换掉一堆寄存器...原创 2018-10-12 21:01:56 · 1229 阅读 · 1 评论 -
10.任务门
Reserved保留的填0就行(TSS Segment Selector)存放TSS段描述符任务门执行过程:INT N查IDT表,找到中断门描述符通过中断门描述符,查GDT表,找到任务段描述符使用TSS段中的值修改寄存器IRETD返回构造一个TSS先xx00e9xx`xxxx0068构造IDT(我代码的选择子是48)0000e500`00480000代码:#incl...原创 2018-10-12 22:39:31 · 305 阅读 · 0 评论 -
11.分页(10-10-12)
在x86的cpu有两种转换的方式10101229912先讲101012分页,默认是29912分页我们要将它先改成101012分页先把矩形处的no去掉然后重启实验过滤它找到正确的现在找到的是一个线性地址,我们来将他转换成物理地址。000AE6C810-10-12分页刚好32位将它分成3份0000 0000 00 == 0x0;00 1010 1110 == 0xA...原创 2018-10-13 14:56:21 · 1393 阅读 · 0 评论 -
12.PDE与PTE
页表:一个大小为 1024 个元素的数组,用来保存页索引号。数组中的每个元素的高20 bit 用来保存页索引号,低 12 bit保存页属性。每个元素的大小是 32 bit,也就是 4 字节。一个页表本身占用一页(4KB)页目录:页表本身既然也占用一页,那页表本身这个物理页也是有索引号的。所以保存这种物理页索引号的页表,叫一级页表,也叫页目录。PTE可以指向物理页,也可以...原创 2018-10-13 19:57:02 · 1796 阅读 · 1 评论 -
13. PDE_PTE属性
物理页的属性= PDE属性&amp;amp;amp; PTE属性 (后12位)4d404063属性含义P:有效位。0 表示当前表项无效。R/W: 0 表示只读。1表示可读可写。U/S: 0 表示3特权级程序可访问,1表示只能0、1、2特权级可访问。A: 0 表示该页未被访问,1表示已被访问。D: 脏位。0表示该页未写过,1表示该页被写过。PS: 只存在于页目录。0表示这是4KB页,指向一个页表...原创 2018-10-13 22:42:52 · 2460 阅读 · 0 评论 -
6.调用门
1、调用门执行流程指令格式:CALL CS:EIP(EIP是废弃的)cs:真正执行的代码下面解释执行步骤:.1)根据CS的值查GDT表,找到对应的段描述符,这个描述符是一个调用门2)在调用门描述符中存储另一个代码段段的选择子3)选择子指向的段 ,段.Base +偏移地址就是真正要执行的地址.当s位为0的时候说明是系统描述符了, type域为1100这时后就是一个门描述符。它的低16...原创 2018-10-11 00:40:07 · 796 阅读 · 0 评论