windows内核中对于索引*4(内存)的一个反汇编知识点

windows内核中对于索引*4(内存)的一个反汇编知识点

今天在分析Windows内核的MmIsAddressValid函数中发现了一个计算策略。

10-10-12分页中,我们按照常规应该取10位,即右移22位,然后乘以4来获取索引

但是反汇编代码中的做法是右移20位,然后后两位清零,这样仍然会得到*4的索引

 

mov     ecx, [ebp+VirtualAddress]
mov     eax, ecx
shr     eax, 14h        ; 右移20位获取PDE在CR3表中的索引
mov     edx, 0FFCh
and     eax, edx
sub     eax, 3FD00000h  ; C0300000+eax
mov     eax, [eax]      ; 拿到PDE值

 

之前还很疑惑其为啥要这么做,分析后感觉这样更符合计算机的思维。

原文地址:https://www.cnblogs.com/onetrainee/p/12502455.html