一、保护模式保护的是什么?
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)