一、段描述符

GDT表里面存的东西叫段描述符,一个段描述符占8字节,结构如下
暂时不需要知道各个位的作用,先练习一下拆分,在windbg中输入以下命令,打印GDT表。

这里我们打印了GDT表的前5个段描述符。以第2个为例,演示拆分。
00cf9b00 0000ffff
0000 0000 1100 1111 1001 1011 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111
Base 31:24: 00000000
G: 1
D/B: 1
0: 0
AVL: 0
Segment Limit 19:16: 1111
P: 1
DPL: 00
S: 1
Type: 1011
Base 23:16: 0000 0000
Base 15:00: 0x00000000
Segment Limit: 0xFFFFFFFF

二、段选择子

段选择子有16位,结构如下图:

其中,0-1位是RPL(暂时不知道是啥);2位是TI位,0表示查GDT表(windows不使用LDT所以此位永远是0),3-15位是GDT表的下标。

下面是段选择子拆分实验:
0x0023
0000000000100 0 11
Index: 0x4
TI: 0
RPL: 11

三、使用LES指令修改ES

// LES.cpp : Defines the entry point for the console application.
//#include "stdafx.h"// RPL <= DPL
// Selector: 0000 0000 0011 1000(0038)
// LES高2字节给ES,低4字节给ECX,其他指令如LSS,LDS依此类推
// RPL是段选择子的权限,DPL是段描述符的权限,数值越大权限越小
// 因此当RPL=3时,只能访问DPL=3的段描述符;当RPL=0时,可以访问所有段描述符
// 下面的buffer作为源操作数执行les指令,会把ES写为0x0038,EAX写为0x11223344
char buffer[6] = {0x44,0x33,0x22,0x11,0x38, 0x00};int main(int argc, char* argv[])
{// LES修改段寄存器__asm{les ecx,fword ptr ds:[buffer]}return 0;
}


(3)段描述符,段选择子,LES指令相关推荐

  1. 【2021.03.10】段描述符与段选择子、GDT、LDT

    要点回顾 前文提到,当写入一个段寄存器的时候,只给了一个16位的数值,但是段寄存器有96位. 那么剩下的80位从哪里来的?这个16位的数值是随便写的吗? Windbg指令 指令 功能 r 查看寄存器 ...

  2. 分段管理机制(段描述符,描述符表,段选择符)

    逻辑地址-=>线性地址-=>物理地址 前面我们提到了当使用80x86微处理器时,有三种不同的地址: 逻辑地址(logical address):包含在机器语言指令中用来指定一个操作数或一条 ...

  3. 1.段描述符与段选择子

    80386中段寄存器分别有: ES CS SS DS FS GS LDTR TR 共96位,其中有16位是可见的,80不可见 至于为什么是96位下面有讲 //结构体表示: Struct Segment ...

  4. 段选择符和段描述符的关系

    段选择符用来表示指向哪个段描述符,即用来在段描述符中寻址,前13位是地址,能寻0到(2^13)-1,因此段描述符表的大小就是 8192,他还牵扯到一些特权级的限制,后三位:段描述符是用来表示这个段的一 ...

  5. (4)段描述符P,G位

    一.回顾 在前面的课程学习中我们了解到,段寄存器有96位,其中80位不可见,包括Base,limit,attribute.16位可见,即段选择子selector. 对段寄存器进行写入时,CPU根据段选 ...

  6. (2) [保护模式]段描述符

    段描述符 1. 段选择子 2. 段描述符 注解: 段选择子index的使用 查GDT表填充段寄存器 向上拓展与向下拓展 一致代码段与非一致代码段 隐式堆栈访问 如果文中有错误,还请指正 1. 段选择子 ...

  7. gdt描述_GDT表与段描述符

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html GDT表与段描述符 一.介绍 如果之前学习过"实模式&q ...

  8. 数据段描述符和代码段描述符(一)——《x86汇编语言:从实模式到保护模式》读书笔记10

    一.段描述符的分类 在上一篇博文中已经说过,为了使用段,我们必须要创建段描述符.80X86中有各种各样的段描述符,下图展示了它们的分类. 看了上图,你也许会说:天啊,怎么这么多段描述符啊!我可怎么记住 ...

  9. 操作系统学习(五) 、代码段和数据段描述符

    一.代码段和数据段描述符格式 段描述符通用格式如下所示: 代码段和数据段描述符中各个位的含义如下所示: 二.代码段和数据段描述符类型 当段描述符中S标志位(描述符类型)被置位,则该描述符用于代码段或数 ...

最新文章

  1. 因为一条SQL,程序员差点被祭天......
  2. IE6动态插入option
  3. boa支持https_Boa: 在 Node.js 中使用 Python
  4. json字符串转java对象数组
  5. 273. 整数转换英文表示(模拟)
  6. 安卓手机上跑_第一名易主?看看安兔兔公布的二月份安卓手机性能跑分排行
  7. Prototype.js 1.4中文使用手册PDF版下载
  8. 关于未知的USB设备(设备描述符请求失败)的解决方法。
  9. 手机变成投影仪 建筑穿上节能衣
  10. 51单片机学习笔记003-----烧录软件和编译器的安装
  11. 进化树相关概念和类型介绍
  12. redis实现分布式锁的几种方式
  13. “脚本小子”和真正黑客的区别是什么?
  14. 视频基本术语介绍 码流、帧率、分辨率、I帧、带宽
  15. 摄影网页设计制作 简单静态HTML网页作品 WEB静态摄影网站作业成品 学生DW摄影网站模板
  16. STM32系列 STM32F4xx SPI Flash-读写操作
  17. VR直播面临的五大技术挑战和实现难点
  18. 百度地图,你学会了吗
  19. 【QQ空间】网名大全
  20. Navicat11 for mysql(包括激活工具)亲测可用

热门文章

  1. 数据中心运维里的那些不成文的规定
  2. python文件处理,python文件处理
  3. 成功解决TypeError: ‘tuple‘ object is not callable
  4. ML之FE:数据随机抽样之利用pandas的sample函数对超大样本的数据集进行随机采样,并另存为csv文件
  5. DL之DCGNN:基于TF利用DCGAN实现在MNIST数据集上训练生成新样本
  6. DL框架之AutoKeras框架:深度学习框架AutoKeras框架的简介、特点、安装、使用方法详细攻略
  7. WRF用户手册翻译:Chapter 5: WRF Model
  8. Android 2018最新验证手机号正则表达式
  9. shp系列(一)——利用C++进行shp文件的读(打开)与写(创建)开言
  10. Spring cloud系列之Zuul配置项中sensitiveHeaders和ignoredHeaders