[原]线性地址到物理地址转换后记

本文解析了在调试环境下CR3寄存器的值与指定进程EPROCESS结构中页目录基址之间的差异原因,并提供了一种使二者一致的方法。同时介绍了如何直接利用进程的页目录基址实现线性地址到物理地址的有效转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前想手动查找线性地址对应的物理地址,以更好的理解操作系统的分页机制,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了,经测试效果很好,妈妈再也不用担心物理地址找不到了。
 





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值