地址说明
有效地址-线性地址-物理地址
有效地址与线性地址
先看如下指令:
MOV eax,dword ptr ds:[0x12345678]
其中,0x12345678 是有效地址
ds.Base + 0x12345678 是线性地址
注意:当段寄存器的Base为0时,有效地址=线性地址,大多数时候都是如此;但也有特殊情况,比如fs段寄存器的Base不为0
CR3说明
每个进程都有一个Cr3(准确的说是都有一个Cr3的值,Cr3本身是个寄存器,一个核,只有一套寄存器)
Cr3指向一个物理页,一共4096字节
101012配置
右键→我的电脑→属性→高级
记得重启
101012实验
const char* hello = "hello world“;
printf("%x, %s", hello, hello)
getchar();
打印出hello world的地址为:
000B0D78
拆分为:
00 0000 0000
00 1011 0000
D78
!process 0 0
由于每个pde占四个字节,所以偏移需要乘以4