一、段描述符

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. 能够在Linux系统中运行的5款大型耐玩游戏
  2. 知识蒸馏综述:蒸馏机制
  3. 语义分割源代码_综述 | 基于深度学习的实时语义分割方法:全面调研
  4. python 错误、调试、单元测试、文档测试
  5. 前言、Python是真的火,还是炒得火?来看看它的前世和发展
  6. 图解 Numpy,原来数据操作这么简单!
  7. 解决 List 执行 remove 时报异常 java.lang.UnsupportedOperationException
  8. form表单ajax提交 ac,請求Ajax 帶返回值的通用方法, 自動獲取頁面控件值(form表單post方法提交 ),自動給控件賦值...
  9. 补习系列(4)-springboot 参数校验详解
  10. Java基础学习总结(169)——ThreadLocal 使用总结
  11. 杭电1466计算直线的交点数
  12. 38000词汇词根统计
  13. CDlinux万能无线破解系统iSO中文版 U盘启动版
  14. 安装PyTorch详细过程
  15. 如何搞懂html+php实现个人博客网站?【附代码详解】毕业设计 大作业项目
  16. bigdecimal负数变正数_Java中BigDecimal的8种舍入模式
  17. 有没有自己制作地图的软件,可以生成地图的软件
  18. android 播放资源mp4,android肿么实现播放资源文件中的MP4文件??
  19. robocode调试技巧
  20. carbon安装win7 thinkpad x1_联想ThinkPad X1 Carbon 2018笔记本如何安装win7系统

热门文章

  1. 配电房来了个傻员工,改变了所有聪明的员工!
  2. Python之sklearn-pandas:sklearn-pandas库函数的简介、安装、使用方法之详细攻略
  3. 成功解决ModuleNotFoundError: No module named 'keras_retinanet.utils.compute_overlap'
  4. 元计算:《元计算破解生命密码》听课笔记
  5. Excel:利用Excel内置功能实现对某列表格按照条件进行升降序排列
  6. Python基础 --- 使用 dict 和 set
  7. SoringMVC-常用注解标签详解(摘抄)
  8. Qt窗口部件与布局之二:布局管理
  9. OpenGL学习笔记以及其它学习思考
  10. 中文分词词性对照表(转)