GDT/LDT/段是什么
2019-06-15 本文已影响0人
睦Q
The Global Descriptor Table (GDT) is a data structure used by Intel x86-family processors starting with the 80286. 所以在arm处理器上是不需要用的。
汇编语言里的地址都是逻辑地址,也就是,不是真正的虚拟地址,需要GDT/LDT/转换成虚拟地址才能用。为什么不直接用虚拟地址呢?再研究。
随便反汇编一个程序,看汇编代码:
mov 0x80495b0, %eax
这里0x80495b0就是一个逻辑地址。其实它只是一个段的偏移量。代码底层是分段的,代码段CS, 数据段DS, 堆栈段等。所以真正的虚拟地址是段地址+偏移量。 上面这句汇编就是把DS段的偏移为0x80495b0位置的数据放入eax寄存器。
下面来找DS段地址。本来CPU有寄存器可以放DS段的地址,可以直接拿这个寄存器的值就可以。 问题是寄存器很小,只有16位,而段地址一般是64位或32位。那么装不下。
具体参考:https://blog.csdn.net/darmao/article/details/78981649