自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

xyjikl

for fun.

  • 博客(171)
  • 资源 (2)
  • 收藏
  • 关注

转载 GDT,LDT,GDTR,LDTR 详解,包你理解透彻

一、引入保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器: 存储段描述符选择器:存储段描述符的索引段寄存器PS:原先实模式下的各个段寄存器作为保护模式下的段选择器,80486中有6个(即CS,SS,DS,ES,FS,GS)80位的段寄存器。由选择器CS对应表示的段仍为代码段,选择器SS对应表示的段仍为堆栈段。二、详解先说明

2016-08-31 17:09:27 2377

转载 关于CPL、RPL、DPL

保护模式中最重要的一个思想就是通过分级把代码隔离了起来,不同的代码在不同的级别 ,使大多数情况下都只和同级代码发生关系。Intel的80286以上的cpu可以识別4个特权级(或特权层),0级到3级。数值越大特权越小。一般用把系统内核放在0级,系统的其他服务程序位于1、2级,3级则是应用软件。一般情况下代码都在自己的级别下做自己的工作,同一级别之间可以相互访问,而一般是不允许不同级别的代码间随意

2016-08-31 16:58:51 6519

转载 特权级——保护模式的特权级检查 DPL,RPL,CPL, 一致代码段,非一致代码段

特权级是保护模式下一个重要的概念,CPL,RPL和DPL是其中的核心概念,查阅资料无数,总结如下。 一、CPL、RPL、DPL简单解释    CPL是当前进程的权限级别(Current Privilege Level),是当前正在执行的代码所在的段的特权级,存在于cs寄存器的低两位。    RPL说明的是进程对段访问的请求权限(Request Privilege Level),是对于段

2016-08-31 16:38:43 1005 1

转载 3.2.3节:特权级

原来看第3.2.3节的时候,感觉很难的。为什么会感觉难呢? 因为这一节谈到的特权级别关系比较复杂,不容易弄清楚。这次重看一次这一节后,进行了一点小结,这才感觉比较清楚了。      这一节的主要内容可以用下面这个表格来描述。目标代码段Jmp指令Call指令直接调用通过调用门

2016-08-31 16:19:25 352

转载 保护模式初步理解

保护模式初步理解与实模式一样,保护模式中内存也被逻辑上分成了一个个具有相应功能的段,比如代码段,数据段,栈段等。 但是保护模式中,每个段的“个性“更鲜明。我们知道,在实模式中,所有内存都是可读、可写、可访问的,你哪天看哪块内存不爽了, 轻轻松松就可以把他里面的东西搞乱,非常的不安全。 但在保护模式中,每个段在定义的时候就被赋予了段基址、段长度、段类别(代码段/数据段/...)、特权级等

2016-08-31 12:03:56 551

转载 加载Loader.bin

1、突破512字节的限制2、加载Loader进入内存一、突破512字节的限制一个操作系统从开机到开始运行,大致经历"引导—》加载内核入内存—》跳入保护模式—》开始执行内核"这样一个过程。也就是说,在内核开始执行之前不但要加载内核,还要准备保护模式等一系列工作,如果全部交给引导扇区来做,512字节很可能不够用,所以,不放把这个过程交给另外的模块来完成,我们把这个模块叫做Loader。引导

2016-08-31 09:48:25 1175

原创 sudo mount -o loop pm.img /mnt/floppy/mount 错误解决办法--mount 您必须指定文件系统的类型

sudo mount -o loop pm.img /mnt/floppy/mount mount: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error In some cases us

2016-08-31 09:48:01 6755 1

转载 特权级3(调用门)

调用门的作用gate简单来说可以想象成政府为人民提供的一个政府诉求中心,它可以集中收集人民对政府的要求和投诉,然后把这些诉求发给相关的政府部门来处理。 门提供了受保护的间接调用,为任务内的特权转移提供了安全可靠的方法。由于程序不可能进入具有更高优先级段中的任何位置。如果他们一定要进入,则只能使用调用门进入到调用门描述符指定的位置。而操作系统中定义了系统中的全部门,因此也就保证了所有的门

2016-08-31 09:47:20 431

转载 调用门

门,顾名思义它是一扇门通向令一个地方,看一下门的结构里面有一个描述符和一个偏移值,门中定义了这扇门通向的目的地,当我们调用一个门的时候会到达这个地方:门中的选择子:门中的偏移值,也即下图的selector:offset这是我们代码中国定义的门的数据结构:#define Gate(Selector,Offset,PCount,Attr)\.2byte (Offset&0xff

2016-08-30 22:55:52 564

转载 特权级和调用门

在IA32的分段机制中,总共有4个特权级别,从高到低分别是0、1、2、3。处理器通过识别下面3中特权级进行特权级检验1.CPL(Current Privilege Level)CPL是当前执行的程序或者任务的特权级,它被存储在CS和SS的第0位和第1位上,通常情况下,CPL等于代码所在的段的特权级,但是有一个例外是如果在遇到一致代码段时,当处理器访问一个与CPL特权级不同的代码段时,CPL不会

2016-08-30 22:54:22 329

转载 makefile文件

全面剖析《自己动手写操作系统》第五章---makefile文件  http://blog.csdn.net/zgh1988/article/details/73383801、make概述2、编译和链接3、makefile规则4、自己动手写makefile文件5、后记一、make概述        作为程序员,我们都有使用过Visualstdio 2005、VC6.0

2016-08-30 22:44:50 635

转载 第五章--加载内核Kernel.bin

1、Linux系统的安装 和 与宿主计算机共享文件夹2、global 和 extern 关键字的作用3、C调用规范(C Calling Convention)4、ELF文件5、Loader.bin进行加载内核——进入保护模式——向内核交出控制权一、Linux系统的安装 和 与宿主计算机共享文件提到Linux系统的安装,我们需要回归到第2章中2.3节——"安装虚拟

2016-08-30 22:39:59 1066

转载 FAT12文件系统

一、 FAT12FAT12是DOS时代就开始使用的文件系统(File System),直到现在仍然在软盘上使用,FAT12软盘的被格式化后为:有两个磁头,每个磁头80个柱面(磁道),每个柱面有18个扇区,每个扇区512个字节空间。所以标准软盘的总空间为:2 * 80 *18 * 512=1474560B=1440K=1.44M下面是FAT12的结构图:1、引导扇区

2016-08-30 22:29:24 10416

转载 第三章--堆栈段的工作方式

堆栈段在实模式和保护模式下的工作方式相同,下面我们只介绍在实模式下的工作方式:其中SS 堆栈段寄存器,用来存储堆栈段的初始地址;SP 堆栈指针寄存器,用来存储堆栈段的栈顶偏移量。堆栈段初始化的工作如下: SS定位到堆栈段的起始地址(基地址,低地址),栈底位于堆栈段的有效地址的最末端(高地址)。SP初始化为堆栈段的大小,SS:SP永远指向堆栈的栈顶。在初始化时,SS:SP

2016-08-30 22:18:49 7840 2

转载 “实模式--保护模式--实模式”转换过程

下面以pmtest2.asm为例,来讲述“实模式--保护模式--实模式”的转换过程。1、“实模式--保护模式--实模式”的转换过程。2、介绍段描述符属性3、pm.inc 中的宏定义4、pmtest2.asm源代码一、“实模式--保护模式--实模式”的转换过程1、“实模式--保护模式”的跳转(1)关中断(2)打开地址线A20(3)置cr0寄存器的末位为1

2016-08-30 22:18:04 785

转载 第一章--最小的“操作系统”

一、最简单的“操作系统”最最简单的“操作系统”就是一个最最简单的引导扇区(Boot Sector)。虽然它不具有任何功能,但是它却能够直接在裸机上运行,不依赖其他软件。一个引导扇区是512个字节,并且以0xAA55为结束标识的扇区。下面就是那个最最简单的引导扇区。[cpp] view plain copy org 07C00h                

2016-08-30 22:08:08 3871

转载 通过调用门进行有特权级变换的转移,详细注解 对pmtest5.asm解释很详细.

http://www.myexception.cn/operating-system/484288.htmlhttp://www.myexception.cn/operating-system/445331.htmlhttp://www.myexception.cn/operating-system/445078.html 代码总体过程如下:1.进入保护模式,显示字符In Pr

2016-08-30 22:04:44 374

转载 不同特权级代码段之间的跳转

1、特权级2、一致代码段和非一致代码段3、DPL、RPL、CPL分别代表的含义,存储在什么位置,以及它们之间的关系4、不同特权级数据段之间的访问规则5、不同特权级代码段之间的转移6、代码段之间的转移对堆栈的影响7、结合pmtest5.asm来见证不同特权级代码段之间的跳转一、特权级在IA32的分段机制下,特权级总共有4个特权级别,从高到低分别是0、1、2、3。数

2016-08-30 22:02:53 873

转载 门描述符

在系统中除了存储段描述符和系统段描述符外,还有一类门描述符。门描述符并不描述某种内存段,而是描述控制转移的入口点。这种描述符好比一个同向另一代码段的门。通过这种门,可实现任务内特权级的变换和任务间的切换。所以,这种门描述符也称为控制门。其中,门描述符共分为4种分别是,调用门(CallGates),陷阱门(TrapGates),中断门(Interrupt Gates)和任务门(TaskGates)。

2016-08-30 21:46:35 1875

转载 一致代码段与非一致代码段

首先,我们先来看几个问题:一致代码段和非一致代码段是什么?为什么要有一致代码段和非一致代码段?系统提供怎样的机制来使用户程序访问内核数据?程序如何在段与段之间跳转?接下来,我们将讨论上述这些问题。特权级为了更好的理解之后的问题,我们先来讨论一个概念:特权级。特权级是一种机制来保护数据和防止恶意行为,特权级分4种:0,1,2,3。0为最

2016-08-30 21:43:26 896

转载 统一代码段与非一致代码段

一致代码段与非一致代码段上几篇文章,我们一直在讨论的都是 GDT 相关的一些问题,现在我们知道在系统在从实模式向保护模式跳转时,GDT 是必须要准备的结构。在介绍这一跳转之前,这篇文章我们来介绍两个概念:一致代码段和非一致代码段。首先,我们先来看几个问题:一致代码段和非一致代码段是什么?为什么要有一致代码段和非一致代码段?系统提供怎样的机制来使用户程序访

2016-08-30 21:40:43 410

转载 CPL DPL RPL的区别 &&一致性代码段和非一致性代码段

概述:在谈论保护模式编程的时候,一直会有这样的困惑:为什么除了CPL和DPL还有RPL?什么时候高特权级不能访问低特权级?什么时候低特权级不能访问高特权级?一致性代码和非一致性代码有什么区别?等等这些问题,如果仅仅停留在知其然的级别,很容易会困惑,本文主要说明以上问题的答案和蕴涵在背后的原因。1.特权级       首先,了解以下操作系统的特权级    1)CPL是存寄

2016-08-30 21:39:56 440

转载 一致代码段和非一致代码段

之所以出现这个定义是因为系统要安全:内核要和用户程序分开..内核一定要安全.不能被用户程序干涉.但是有时候用户程序也需要读取内核的某些数据,怎么办呢?操作系统就引入了访问特权等级(0-3)的机制.这些特权等级,通过三个符号来体现CPL/DPL/RPL.其中CPL是存寄存器如CS中,RPL是代码中根据不同段跳转而确定,以动态刷新CS里的CPL.DPL是在GDT/LDT描述

2016-08-30 19:21:46 289

转载 一致性代码段和非一致性代码段【转】

一致代码段是内核开辟出来的供应用程序访问的段,但是不允许用户程序写入数据。CPL(Current Priviliege Level):它代表了当前代码段的特权等级,由CS和SS的第0位和第1位表示。当程序转移到不同的特权等级的代码时处理器将改变CPL。在遇到一致代 码段时,一致代码可以被相同或者更低特权等级(用户程序)的代码访问。当处理器访问一个与CPL特权等级不同的一致代码段时,CPL不

2016-08-30 19:17:14 1400

转载 一致性代码段和非一致性代码段

一致代码段:非一致代码段.之所以出现这个定义是因为系统要安全:内核要和用户程序分开..内核一定要安全.不能被用户程序干涉.但是有时候用户程序也需要读取内核的某些数据,怎么办呢?于是os将内核程序开辟一些可以供用用户程序访问的段.但是不允许用户程序写入数据.1.内核不用知道用户程序的数据.内核不用调用用户程序的数据.内核不用转移到用户程序中来.2.用户程序只能访问到内核的某些

2016-08-30 19:15:49 470

转载 Bochs安装FreeDOS与调试

最经看《80x86汇编语言程序设计》杨季文等著,里面的保护模式的例子无法调试,后来查到bochs可以调试,就折腾了一番,这里写下吧……>>>>>>>>>>>>>>>>>>>>>>>无耻的分割线>>>>>>>>>>>>>>>>>>>>>>>>下载地址:Bochs:http://bochs.sourceforge.net/FreeDOS:http://www.freedos.org

2016-08-28 14:55:17 1850

转载 段选择符和段寄存器

80x86使用了一种称为段(Segment)的寻址技术。这种寻址技术把内存空间分成一个或多个称为段的线性区域,从而对内存中一个数据对象的寻址就需要使用一个段的起始地址(即段地址)和一个段内偏移地址两部分构成。段地址部分使用16位的段选择符指定,其中14位可以选择214即16384个段。段内偏移地址部分使用32位的值来指定,因此段内地址可以是0~4GB。即一个段的最大长度可达4GB。程序中由16位的

2016-08-28 12:30:23 1523

转载 段选择符 段寄存器

保护模式就是对程序的运行加以保护,所以说保护模式较实模式的增强的最主要体现还不是寻址能力而是对多任务的支持,所提到的保护就是对不同任务间和同一任务内的程序加以保护,使它们的运行不受对方“有意”或“无意”影响,但同时也要对两个任务都要用到的部分代码实现共享。另外一个重要的增强就是对虚拟存储器的支持,从一定意义上说可以使程序设计人员不必考虑物理内存的大小。  有了新的模式,当然要有大量的新增寄存器的支

2016-08-28 12:16:28 1634

转载 段选择符和段寄存器

段选择符和段寄存器sujinxiu-linux  转载地址:http://home.lupaworld.com/home-space-uid-401174-do-blog-id-231280.html首先看一下段选择符。段选择符为16位。为了方便查找段选择符,CPU提供了段寄存器来存放段选择符。段寄存器有cs, ss, ds, es, fs, gs(为16位),主要的有cs:代码段寄存

2016-08-28 12:06:58 908

转载 操作系统开发系列—2.进入32位保护模式

源码如下:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647

2016-08-28 10:53:05 1297

转载 NASM汇编程序中的宏定义

NASM汇编程序中的宏定义格式如下:%macro 宏名 参数名列表 宏体%endmacro如:%macro Descriptor 3dw %2 & 0FFFFh dw %1 & 0FFFFh db (%1 >> 16) & 0FFh dw ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh) db (%1 >> 24) & 0FFh

2016-08-28 09:31:04 6580

转载 Intel X86 CPU系列的寄存器

一、32位CPU系统级寄存器和数据结构二、寄存器分类介绍通用寄存器:8个,分别为EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI标志寄存器:1个,EFLAGS控制寄存器:5个,分别为CR0-CR4调试寄存器:8个,分别为DR0-DR7系统地址寄存器:4个,GDTR、IDTR、LDTR和TR16位段寄存器:6个,分别为CS,DS,ES,FS,GS,SS

2016-08-28 09:19:32 1573

转载 80x86寄存器

注意】本文使用到的汇编指令的语法是Intel汇编语法,除此之外的内容与汇编语法无关 【80x86寄存器】  32位CPU所含有的寄存器有: ・4个32位通用寄存器(EAX、EBX、ECX和EDX) ・2个32位变址和指针寄存器(ESI和EDI) 2个32位指针寄存器(ESP和EBP) ・6个[16位(段选择符)+隐藏部分(描述符缓冲)]段寄存器(ES、CS、SS、DS、FS

2016-08-28 09:17:41 727

转载 控制寄存器和系统地址寄存器

控制寄存器和系统地址寄存器目录(?)[+][-]一控制寄存器保护控制位协处理器控制位CR2和CR3二系统地址寄存器全局描述符表寄存器GDTR局部描述符表寄存器LDTR中断描述符表寄存器IDTR任务状态段寄存器TR     80386控制寄存器和系统地址寄存器如下表所示。它们用于控制工作方式,控制

2016-08-28 09:12:50 1013

转载 控制寄存器

2016-08-28 09:09:15 668

转载 内存管理寄存器

处理器提供了4个内存管理寄存器(GDTR、LDTR、IDTR和TR),用于指定分段内存管理所使用的系统表的基地址。处理器为这些寄存器加载和保存提供了特定的指令。  GDTR、LDTR、IDRTR和TR都是段基址寄存器,这些段中包含分段机制的重要信息表,GDTR、IDTR和LDTR用于寻址存放段描述符的段。TR用于寻址一个特殊任务状态段TSS(Task State Segme

2016-08-28 09:08:11 968

转载 操作系统类指令

本文介绍操作系统类指令。其中的某些指令始于286。通常只在操作系统代码中使用这些指令,而不在应用程序中使用这些指令。这是把它们称为操作系统类指令的原因。为了保证操作系统的安全,保护模式下的80386支持四个特权级。相应地,这些操作系统类指令也可分为三种:实模式和任何特权级下可执行的指令、实模式及特权级0下可执行的指令和仅在保护模式下执行的指令。这里下载本文源代码。实模式和任

2016-08-28 09:02:31 1041

转载 保护模式下GDTR,LDTR,全局描述符表,局部描述符表和选择器的关系

这张图要注意:右边两个0-15,其中上面的是LDTR,  下面的是选择子.                  图下第五个标线,是两个线交叉的,实际上第五个线是指向右边水平的那个线.                   没有箭头的两组线分别表示GDT的区间,LDT的区间                   3和3'之间的两个没有箭头的线,是表示分别表示区间的线.           

2016-08-28 09:00:24 715

转载 LGDT/LIDT - 加载全局/中断描述符表格寄存器

操作码 指令说明0F 01 /2LGDT m16&32将 m 加载到 GDTR0F 01 /3LIDT m16&32将 m 加载到 IDTR说明将源操作数中的值加载到全局描述符表格寄存器 (GDTR) 或中断描述符表格寄存器 (IDTR)。源操

2016-08-28 08:57:20 17611

转载 汇编 shl和shr指令的使用

shl和shr是逻辑移位指令。shl是逻辑左移指令,它的功能为:(1)将一个寄存器或内存单元中的数据向左移位;(2)将最后移出的一位写入CF中;(3)最低位用0补充。 指令:mov al,01001000bshl al,1 ;将al中数据左移一位 执行后(al)=10010000b,CF=0。 注意:如果移动位数大于1时,必须将移动位数放在cl中

2016-08-28 08:30:27 86939 1

dajngo个人开发使用博客

修正评论位置 文章后面可添加。隐藏文章id表单, 显示评论条数。表单js 后台验证 验证码有待添加。

2016-02-10

django个人博客

django写的个人博客 几乎实现所有功能。集成kueditor编辑器。

2016-01-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除