首页
社区
课程
招聘
[求助]VAD中已经显示了COMMIT,并且已经访问过内存,PTE仍然无效
发表于: 2008-12-23 22:26 5011

[求助]VAD中已经显示了COMMIT,并且已经访问过内存,PTE仍然无效

2008-12-23 22:26
5011
受牛人启发,做了个实验

主要如下

先Reserve一个地址
PVOID address = VirtualAlloc(NULL,0x1000,MEM_TOP_DOWN | MEM_RESERVE,PAGE_READWRITE);

返回的地址都是0x7ff90000,检查vad可以看见已经有reserve了:
lkd> !vad 7ff90000
VAD     level      start      end    commit
8553a4d8 (-1)      7ff90    7ff90         0 Private      READWRITE 

然后Commit
address = VirtualAlloc(address,0x1000,MEM_COMMIT,PAGE_READWRITE);
检查vad也正常:
lkd> !vad 7ff90000
VAD     level      start      end    commit
8553a4d8 (-1)      7ff90    7ff90         1 Private      READWRITE
而且检查PTE和PDE发现PDE已经建立,但是pte是无效的

然后我向这个地址写入数据了:
char* charPointer = reinterpret_cast<char*>(address);
for (int i = 0; i < length; ++i)
{
  charPointer[i] = str[i];
}
但是,此时PTE仍然是无效的:
lkd> !pte 7ff90000
               VA 7ff90000
PDE at   C03007FC        PTE at C01FFE40
contains 1E9FE867      contains 00000000
pfn 1e9fe ---DA--UWEV 

折腾了好几天了,求牛人帮助。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不知道是不是因为TLB或者cache的缘故。
2008-12-23 22:44
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你!PTE时,当前的进程空间确认是你调试的程序的进程空间吗?
2008-12-24 09:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
之前用.process 命令指定了进程。
2008-12-24 10:55
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
自己读PTE试试
2008-12-24 12:54
0
游客
登录 | 注册 方可回帖
返回