首页
学习
活动
专区
工具
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.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

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.4K30

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

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

3.4K20

保护模式 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位的基地址 与 描述符中的基地址对应关系 描述符的基地址由三部分组成.

1.9K21

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.1K40

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 来进行数学计算并输出。

82810

尘封的中国 Linux 往事

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

1.2K10

浅谈text、data和bss

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

1.9K10

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 三、系统时钟寄存器

64710

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

寄存器寻址和寄存器间接寻址的区别

下面将详细介绍寄存器寻址和寄存器间接寻址的区别以及它们的应用。 寄存器寻址: 寄存器寻址是指指令中直接使用寄存器作为操作数的寻址模式。...在寄存器寻址中,操作数的值存储在一个或多个特定的寄存器中,并且指令直接指定要使用的寄存器。这种寻址模式可以通过寄存器号或寄存器名称来表示。...寄存器间接寻址: 寄存器间接寻址是指指令中使用寄存器存储的地址来获取操作数的寻址模式。在寄存器间接寻址中,寄存器中存储的是数据的地址,而不是实际的数据值。...区别和应用: 访问速度:寄存器寻址直接从寄存器中读取数据,速度非常快,而寄存器间接寻址需要额外的内存访问,速度较慢。...存储空间:寄存器寻址不需要分配额外的内存空间来存储操作数,而寄存器间接寻址需要在寄存器中存储地址值。

39320
领券