首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

保护模式 2讲 - -寄存器结构

保护模式 - -寄存器结构 一丶保护模式学习 保护模式,主要学习的就是 与 页 的关系. 学习的时候先学习寄存器 何为 根据Intel 手册第三卷所属....出了FS寄存器.还有 ES CS SS DS GS LDTR TR等寄存器 我们上面所说的 .base 其实是寄存器的一个成员....可以理解为寄存器就是一个结构体 PS: 在inter手册中也称为寄存器描述符 2.2 寄存器结构 在我们x86平台下.我们知道一个寄存器是 4个字节. 32位. 可以表达一个32位的数据....读取 mov ax,ss 寄存器的可见部分只有16位.所以读出来之后只能放到16位寄存器中 写入 mov ss,ax 读寄存器只是读了可见部分的16位.而写入寄存器则是写入了96位 inter手册对寄存器的操作寄存器指令有以下...2.4.1 寄存器结构 在x86下.我们可以看如下寄存器表示图.

1.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux中的

    这不仅简化了Linux 内核的设计,而且为把Linux 移植到其他平台创造了 条件,因为很多RISC 处理器并不支持机制。但是,对机制相关知识的了解是进入Linux 内核的必经之路。...linux的GDT Linux 在启动的过程中设置了寄存器的值和全局描述符表GDT 的内容,的定义在include/asm-i386/segment.h 中: #define __KERNEL_CS...另外,用户和内核的区别也仅仅在其 RPL 不同,因此内核根本无需访问描述符投影寄存器,当然也无需访问GDT,而仅从寄存器 的最低两位就可以获取RPL 的信息。...寄存器选择子 寄存器CS 、DS 、ES 、FS 、GS 、SS ,在实模式下时,中存储的是基地址,即内存的起始地址。...而在保护模式下时,由于基址已经存入了描述符中,所以寄存器中再存放基址是没有意义的,在寄 存器中存入的是一个叫作选择子的东西– selector。

    4.5K20

    浅谈FS寄存器在用户层和内核层的使用

    在R0和R3时,FS寄存器分别指向GDT中的不同:在R3下,FS寄存器的值是0x3B,在R0下,FS寄存器的值是0x30.分别用OD和Windbg在R3和R0下查看寄存器(XP3),下图:...FS寄存器的改变是从R3进入R0后和从R0退回到R3前完成的,也就是说:都是在R0下给FS赋不同值的....pop ebp 80869951 66817c24088000 cmp word ptr [esp+8],80h 二.R3下的FS 当线程运行在R3下时,FS指向的是...GDT中的0x3B.该段的长度为4K,基地址为当前线程的线程环境块(TEB),所以该段也被称为“TEB”.因为Windows中线程是不停切换的,所以该段的基地址值将随线程切换而改变的.Windows2000...GDT中的0x30.该段的长度也为4K,基地址为0xFFDFF000.该地址指向系统的处理器控制区域(KPCR).这个区域中保存这处理器相关的一些重要数据值,如GDT、IDT表的值等等.

    2.6K30

    如何读取Linux进程中的代码和数据

    Linux下的程序的文件格式是ELF,里面分了各种,有代码、数据、等。当运行这个程序时,系统也会给这个进程创建虚拟内存,然后把ELF中的数据分别加载到内存中的对应位置。...本文整理了用cpp程序读取内存中的代码和rodata数据的方法。...这个文件的前三列分别是代码、rodata数据、和普通数据,可以看到代码的权限是读和执行,rodata数据是只读,普通数据可读写。...用程序读取内存的代码和rodata数据 以tcpdump程序为例,用程序读取代码和radata的过程如下: 1.查看tcpdump的进程ID。...2.运行自己写的程序,分别输入进程PID和代码的地址。

    3.7K20

    保护模式 3讲-寄存器GDT表与个人代码总结

    数组的每一项其实保存的都是描述符 选择子就是下标 3.1.2 GDTR寄存器与GDT表了解. 根据Inter手册所属....寄存器与LDT LDTR寄存器 保存了 16位的选择子 32位的基地址 16位的界限(长度) LDT描述符的属性....2.2 描述符属性详解. 2.2.1 寄存器描述符 一一的对应关系 寄存器中的属性 与 描述符中的属性的对应关系 寄存器我们知道其结构为 struct set { WORD...请不要把 寄存器结构 与 描述符搞混 看下图 ?...对应着描述符的 高4个字节中的 第八位 到 第23位 寄存器中的 32位的基地址 与 描述符中的基地址对应关系 描述符的基地址由三部分组成.

    2.1K21

    Linux从头学03:如何告诉 CPU,代码、数据、栈在内存中什么位置?

    几个重要的寄存器 在 x86 系统中,寻址机制以及相关的寄存器是如此的重要,以至于我忍不住在这里,把几个寄存器再小结一下。 ?...代码:用来存放代码,的基地址放在寄存器 CS 中,指令指针寄存器 IP 用来表示下一条指令在中的偏移地址; 数据:用来存放程序处理的数据,的基地址存放在寄存器 DS 中。...的基地址存放在寄存器 SS 中,栈顶单元的偏移地址存放在寄存器 IP 中。 这里的,本质上是我们把内存上的某一块连续的存储空间,专门存储某一类的数据。...这张图的意思是:在 Linux 2.6 中,用户代码的开始地址是 0,最大范围是 4 GB;用户数据的开始地址是 0,最大范围也是 4 GB;内核的数据和代码也是如此。 ?...在代码的开始部分,把数据标号 addr1 代表的地址,赋值给 DS 寄存器;把栈标号 addr2 代表的地址,赋值给 SS 寄存器。 这里的标号,是不是与 C 语言中的 goto 标号很类似?

    2.2K40

    Linux下开发stm32 ③ | 寄存器工程开发

    先来回顾一下前两篇 Linux下开发stm32(一) | 使用gcc-arm-none-eabi工具链编译 Linux下开发stm32(二) | 使用openocd下载与调试 前两篇我们介绍了如何创建一个空的裸机工程...main文件),并编译工程生成elf文件,然后将其转为bin格式或hex格式,使用openocd下载,最后编写了一个makefile雏形,并成功点亮了一个LED~ 但是这个LED我们是通过指针直接操作寄存器地址来完成的...,接下来,我们在此基础上,引入stm32头文件,其中包含了寄存器的宏定义,也就是使用寄存器进行开发~ 1.创建寄存器工程 首先将上一节中创建的裸机工程00-template-reg复制一份出来,改名为01...0x40010c00+0x0c) &= ~(1<<0); GPIOB->ODR &= ~(1<<0); while(1); } void SystemInit(void) { } 至此,寄存器工程创建完毕...,接下来开始编译~ 2.编译&下载寄存器工程 编译寄存器工程的重点就在于C头文件和C源文件,启动文件的编译和链接都和之前一样。

    1.2K30

    无名寄存器

    在计算机里面也有寄存器,计算机中的寄存器是看得见,摸得着的实体,寄存器中存储需要经常访问的一些数据。...而vim中也有寄存器的概念,vim中的寄存器是一个虚拟的概念,更像是一块专门用来存储数据的内存缓冲区。在使用vim的过程中离不开寄存器,而且我们很早就用到了寄存器,只是没有发现罢了。...几种寄存器类型 无名寄存器 在之前介绍过,可以使用d来删除一内容,使用p来粘贴,使用y来复制, vim中其他的带有删除功能的operator 像 x、c、s 之类的,vim在删除之前会将被删除内容先放到无名寄存器中...但是在有好的shell工具的加持下,我更喜欢用这样的方式直接粘贴一大文字到vim中。...表达式寄存器则可以接受一vim脚本并执行它并输出结果。表达式寄存器使用 =来表示。 例如在插入模式中可以使用 =6*6 来进行数学计算并输出。

    85810

    尘封的中国 Linux 往事

    按照章文嵩对Julian的描述的说法,Julian写程序非常厉害,但也很神秘,两个人一直通过邮件联系,即便时间已经过去二十多年,两人至今仍然没见过面,却始终维持着一基于开源信仰的珍贵友谊。...他也不是凡人,而是Linux中文化最积极的推动者,也是水木清华BBS的 Linux斑竹(即版主),名叫方汉。...年轻的方汉很喜欢玩这个游戏,喜欢到自己上手研发,因此开始自学Linux架服务器。结果他发现Linux比MUD还好玩,兴趣自然转向了Linux。...为了专注研究Linux中文化,方汉当时还有了一个小团队,成员包括他高能物理所的两个师兄陈向阳、于明俭。 他们一起解决了很多Linux中文化的问题,在圈内一时有了“中文Linux三剑客”的名头。...魏永明带着几个研究生基于Linux重新设计了数控系统的架构,并利用业余时间为Linux系统重写MiniGUI。 在Linux上重写后的MiniGUI功能更丰富,用户体验更好。

    1.3K10

    浅谈text、data和bss

    一般情况,一个程序本质上都是由 bss、data、text三个组成——这是计算机程序设计中重要的基本概念。...bss 部分将会清零(bss属于静态内存分配,即程序一开始就将其清零了)。...比如,在C语言程序编译完成之后,已初始化的全局变量保存在.data 中,未初始化的全局变量保存在.bss 中。 text: 用于存放程序代码的区域, 编译时确定, 只读。...区别很明显,程序1位于bss,程序2位于data,两者的区别在于: 全局的未初始化变量存在于bss中,具体体现为一个占位符,全局的已初始化变量存于data中,而函数内的自动变量都在栈上分配空间。...BSS的大小从可执行文件中得到,然后链接器得到这个大小的内存块,紧跟在数据后面。当这个内存区进入程序的地址空间后全部清零,包含data和bss的整个区段此时通常称为数据区。

    2.1K11

    linux有一时间后

    linux有一时间后该知道的细节 1、wrx各个权限在文件和文件夹的不同。...TED-WNAG/g或:1,$s/Ted-Wnag/TED-WNAG/gc 8、区块选择、多文件编辑、多窗口编辑、环境设定、断行字符、语系转换待补充 9、跳脱[Enter] ---- ---- ---- 用linux...有一时间后该知道的命令 1、chgrp、chown、chmod和mkdir、rmdir的递归参数 2、ls -al和ls -alS 3、cp -i和cp -l(硬连结)/cp -S(符号连结) 4、rm...『$(指令)』 『version=(uname -r)』『echo version』->『3.10.0-229.el7.x86_64』 版权所有:可定博客 © WNAG.COM.CN 本文标题:《用linux...有一时间后》 本文链接:https://wnag.com.cn/28.html 特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,

    1.6K20

    NVIC寄存器

    在STM32中用到了Cortex-M3定义的三组寄存器,有关这三组寄存器的说明不在STM32的技术手册中,需要参考ARM公司发布的Cortex-M3 Technical Reference Manual...在STM32的固件库中定义了三个结构体与这三个寄存器组相对应,这三个结构体与ARM手册中寄存器的对应关系如下: 一、NVIC寄存器组 STM32的固件库中有如下定义: typedef struct {...Interrupt Clear-Pending Register IABR = Active Bit Register IPR = Interrupt Priority Registers 每个寄存器有...global interrupt 位置59 – DMA2_Channel4_5 = DMA2 Channel4 and DMA2 Channel5 global interrupts 二、系统控制寄存器组...Manage Address Register BFAR = Bus Fault Address Register AFSR = Auxiliary Fault Status Register 三、系统时钟寄存器

    70310

    九种移位寄存器原理与设计(循环(左、右、双向)移位寄存器、逻辑和算术移位寄存器、串并转换移位寄存器、线性反馈移位寄存器LFSR)

    按移位方向分类:①单向移位寄存器(包括左移、右移)②双向移位寄存器 按循环方式分类:①循环移位寄存器②非循环移位寄存器 按部位的不同分类:①逻辑移位寄存器②算术移位寄存器 按输入输出方式分类:①串入串出...②串入并出③并入串出④并入并出 二、简单循环左移/右移/双向移位寄存器 2.1 简单循环左移/右移/双向移位寄存器 (1)右移移位寄存器 图片 (2)左移移位寄存器 图片 (3)双向移位寄存器 图片 为便于扩展逻辑功能和增加使用的灵活性...,在单向移位寄存器基础上,增加由门电路组成的控制电路,便可构成双向移位寄存器。...一般双向移位寄存器逻辑图示例: 图片 2.2 verilog代码 要求:设计一个四位循环移位寄存器,包括三种移位寄存器,分别是左移移位寄存器、右移移位寄存器、双向移位寄存器。...//三个四位宽的循环移位寄存器 //左移移位寄存器、右移移位寄存器、双向移位寄存器 module sr_simple #( parameter WIDTH = 4 //定义数据位宽 )(

    10.2K20
    领券