CPU寄存器 有AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个。
而这14 个寄存器按照一定方式又分为了:
本文主要介绍段寄存器,页寄存器。
当我们用汇编读写某一个地址时:
mov dword ptr ds:[0x123456],eax
我们真正读写的地址是:
ds.base +0x123456
ds就是段寄存器,内部存的就是段地址。
ES、CS、SS、DS、FS、GS、LDTR、TR 共8个。
在实模式下我们只能看到ES、CS、SS、DS。
在保护模式下才能看到额外的2个FS,GS。


段选择址:
拓展数据段寄存器
通过一段内联汇编认识ds段寄存器
#include "stdafx.h"
#include
int value = 10;
int _tmain(int argc,_TCHAR* argv[]) {
__asm
{
mov eax, dword ptr [value];
}
return 0;
}
实际转为了这一段汇编

存储堆栈环境
通过一段内联汇编认识ss段寄存器
#include "stdafx.h"
#include
int _tmain(int argc,_TCHAR* argv[]) {
int value = 10;
__asm
{
mov eax, dword ptr [value];
}
return 0;
}
实际转为了

LDT:(Local Descriptor Table)
GDT:(Global Descriptor Table)


002B代表的含义是
0010,1011
011 代表ring3,应用层权限