保护模式-段寄存器属性探测

一、保护模式保护的是什么?

Example:  
MOV DWORD PTR DS:[1234567],EAX  


这行的意思是访问ds.base+1234567 这个地址    
如果想要访问该地址,需要具备2个条件:    
(1)段限制:ds寄存器的Attr属性是否具备可写属性    
(2)页限制:虚拟地址1234567是否超过了三环的最大访问限制  

二、段寄存器的长度是多少?

段寄存器的长度共96位     
Selector  16位    
Attribut  16位         
Base      32位     
Limit     32位 
属性探测:
#include "stdafx.h"
#include <Windows.h>

int value = 0x100;
int value2 = 0;

int _tmain(int argc, _TCHAR* argv[])
{

	OpenProcess(NULL,NULL,NULL);
	value = 100;
	__asm
	{
		mov ax,cs;
		mov ds,ax;
		mov eax,100;
		mov dword ptr ds:[value],eax   //这里会报错,实际上是访问了cs.base+0x100处,cs是不可写的
		mov ax,es;
		mov ds,ax;
	}
	

	printf("value = %x\r\n",value2);
	system("pause");
	return 0;
}

三、x86段寄存器成员介绍(附件1)