之前想手动查找线性地址对应的物理地址,以更好的理解操作系统的分页机制,cr3的值和指定进程的EPROCESS的值总是对不上。
具体参考笔记[原]线性地址到物理地址转换
今天突然灵光一闪,想起来张老师说过的关于CR3的相关知识,CR3是操作系统在切换进程的时候才会更新的,我们用.process /p 指定
特定进程的时候,CR3的值是中断到调试器那一刻正在运行的进程的页目录基址(PDB),而不是我们指定的进程的页目录基址,所以不一样是很正常的。换句话说.process /p只指定此刻我们想操作哪个进程,比如下断点啊什么的,都是针对我们指定的进程。
如果我们想让CR3和EPROCESS值一样,我们可以这样。
.process /p notepad_eprocess
.reload /user
bp API
g
一会当notepad调用指定的api时就会中断到调试器,此时CR3的值就是notepad的页目录基址,我们可以放心用CR3进行转换啦。
后来转念一想,虚拟地址到物理地址的转换不就是根据页目录指针么,可以通过CR3获取,也可以直接从进程获取。
!process命令就给出了baseDir的值,直接通过此值进行转换就OK了,经测试效果很好,妈妈再也不用担心物理地址找不到了。