01 段寄存器

引言:要学习保护模式中段的机制,首先就要学习段寄存器。

首先,我们来看一下下面这段代码:
mov dword ptr ds:[0x123456],eax
在上面我们真正读写的地址是:ds.base + 0x123456
代码中的ds就是我们这里要介绍的段寄存器,base是段寄存器中的成员;为了更直观的了解段寄存器,我们用OD打开一个.exe文件如下图:
在这里插入图片描述
图中红框中就是段寄存器(如果非要对概念了解很清楚,那么请去学以下8086汇编),当然除了上面几个段寄存器,x86中还有两个寄存器,一个是LDTR,另一个是TR,接下来我们看一下段存器的结构,如图:
在这里插入图片描述
段寄存器分为可见部分和不可见部分,其中对我们可见的就只有16位的段选择子,其他80位对我们不可见;用结构体来表示器结构如下:

struct SegmentRegister{
	W	ORD Selector; //16为段选择子
	W	ORD Attribute; //16为段选择子
	DWORD Base;  //32位Base
	DWORD Limit; //32位Limit
};

Attribute:表示这个段的属性,如可读还是可写亦或是可执行的等。
Base:指的是当前段起始位置
Limit:指的是段的长度
然后,我们看一下对段寄存器的读写:
我们读段寄存器的时候只能读它可见部分的16位如:
mov ax,es
写寄存器的时候写了段寄存器的96位,如:
mov es,ax

猜你喜欢

转载自blog.csdn.net/lifeshave/article/details/86499040
今日推荐