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值
之前还很疑惑其为啥要这么做,分析后感觉这样更符合计算机的思维。