type
status
date
slug
summary
tags
category
icon
password
Property
Aug 9, 2025 08:19 AM
这个东西其实很多,但是文章里不想细讲,我就大概的讲一下,这个篇文章还是偏笔记为主。
 
总之全局描述符这个东西是继实模式之后保护模式推出的一种内存管理结构。
在实模式下访问内存基本就是靠“段地址+偏移地址=线性地址”这种方式来访问。
保护模式下兼容了原先的内存访问方式,并且加强了安全性,还扩大了寻址范围。
全局描述表(GDT),下对所有管理的内存就会以全局表述符的方式保存。
 
notion image
 
上图有些字段被拆开zz了,例如段基址被拆分再了三个不连续的内存上。这是因为为了兼容一些遗留问题导致的。具体就别想了。实际使用的时候需要组装成连续的数据。
下面就简单的解释一下每个位的意义:

位31-24:段基地址高8位

存储段起始物理地址的最高字节(bits 24-31),与低16位共同组成32位基地址。

位23:G(Granularity)- 粒度位

  • 0 = 段界限以 1字节 为单位(传统模式)
  • 1 = 段界限以 4KB 为单位(现代OS必选)
 

位22:D/B(Default Operation Size)- 操作数/栈大小

  • 代码段
    • 1=32位指令(EIP),0=16位指令(IP
  • 数据段
    • 1=32位栈(ESP),0=16位栈(SP

位21:L(Long Mode)- 64位模式

  • 1= 进入64位长模式(x86-64)
  • 0= 保持32/16位模式

位20:AVL(Available)- 保留位

操作系统自由使用(通常为0)

位19-16:段界限高4位

段界限的最高4位(bits 16-19),与低16位构成20位总界限值。

位15:P(Present)- 存在位

  • 1= 段在内存中(访问时触发缺页异常)
  • 0= 段不在内存(访问时触发#NP异常)

位14-13:DPL(Descriptor Privilege Level)- 特权级

  • 00= 特权级0(内核)
  • 01= 特权级1
  • 10= 特权级2
  • 11= 特权级3(用户程序)

位12:S(Descriptor Type)- 描述符类型

  • 1= 代码/数据段
  • 0= 系统段(TSS/LDT等)

位11-8:TYPE - 段类型(S=1时生效)

代码段
数据段
3
1(可执行)
0(向上扩展)
2
1(一致性)
1(可写)
1
1(可读)
1(允许写入)
0
1(已被访问)
1(已被访问)
例:只执行代码段 = 1000b,可写数据段 = 0010b

位7-0:段基址中8位

基地址的中间字节(bits 16-23)

位31-16:段基址低16位

基地址的最低字(bits 0-15)

位15-0:段界限低16位

段界限的最低字(bits 0-15)
关于Chrome密码管理器的实现逻辑逆向研究记录一次软路由故障
Loading...