My first blog: GDT与基本描述符的结构

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了My first blog: GDT与基本描述符的结构相关的知识,希望对你有一定的参考价值。

参考文章:Intel64 and IA32 Architectures Software Developer‘s Manual Volume 2 ~ 3

GDT(Global Descriptor Table,全局描述符表)是x86和amd64架构最最基本的数据结构,它存储在内存中,以GDTR记录基地址,是让电脑从实模式跳转到保护模式的台阶。在汇编代码中,我们可以用 lgdt [gdt_base] 来加载GDT到内存中。

GDT的结构是这样的:

GDTR.base->           _________________________      \

                     |________``````````_______|     |

                     |_________Items___________|     | <- GDTR.limit

                     |________``````````_______|     /

然后GDTR的结构是这样的:

79                                  16 15           0

|________________Base_________________|____Limit_____|

其实,它并没有这么高深,而只是一个表状结构而已。而里边的表项(描述符)则因为历史原因被分割得乱七八糟。

在实模式里,描述符(没此一说)就是个long-jmp pointer,如下所示。

31                    16 15                   0

|_________Base__________|________Limit________|

而在保护模式里,它分成了两类:段描述符和系统描述符

段描述符的格式如下:

63          56 55 54 53 52  51        48 47 46 45 44 43    40 39                                        16 15                    0

| Base(31:24) | G|DB| L|AVL|Limit(19:16)| P| DPL | S| Type   |_______________Base(23:0)___________________|________Limit(15:0)___|

Granularity-----^  ^  ^  ^                ^  ^     ^  ^

Default op size----‘  |  |                |  |     |  |

Long mode-------------‘  |                |  |     |  |

Available for developers-‘                |  |     |  |

Present-----------------------------------‘  |     |  |

Descriptor Privilege Level-------------------‘     |  |

Is system descriptor-------------------------------‘  |

Descriptor type: details under------------------------‘

以上是关于My first blog: GDT与基本描述符的结构的主要内容,如果未能解决你的问题,请参考以下文章

带有可选占位符的 string.format()

14课 局部段描述符的使用

深入理解Linux内核 - 第二章 内存寻址 04

my first blog

my first python blog

My First Blog