关于页面属性的几点疑惑,百思不得其解!!求助
Windows内核调试
关于页面属性的几点疑惑,百思不得其解!!求助
一鱼之歌
2009-02-18, 14:15 下午
以下是我的实验:
1,使用windbg命令!pte 77d10000(user32.dll基址),发现其中的copy-on-write(bit9)位为0,
疑惑,user32是受内存映射文件支持的,并为系统所有程序共享,可以肯定user32是受c-o-w保护的
只是不知道为什么没有设置这个位!
2,根据widnows核心编程中描述,PE文件中的section如果设置了共享位,那就可以有效的关闭c-o-w保护
于是,我写了个dll程序,让windbg加载(因为我不懂用windbg切换进程空间),并另外写了一个section,当这个section设置为RWS的时候
用!pte xxxxxxx(这个xxxxxx是这个section的起始地址,这个不会错,因为我查看里面的值我和程序的一样)
发现这个时候 bit9 确实为0,表示关闭了c-o-w保护,原本觉得很合理。照理的话,如果区段section为RW属性时
那应该bit9为1,没错,对我这个dll程序的这个区段确实是这样,但令我惊奇的是程序本身的其它section 如.rdata
(用工具查看,其属性和我自写的secion属性为RW时一致),我用!pte yyyyyy这个yyyy是rdata的起始地址,发现它们的bit9并没有置1
这个现象和user32.dll一样。那我就晕了,我自己写的section和程序本身的section属性一样,但我的bit9为1,而程序本身的却为0
完!
==============================
这里面应该怎么解释,把windows核心编程和windows internal内存那几节看几遍了,NND。
其中核心编程一书中的vmmap遍历整个地址空间,确实显示系统的dll里面有写时复制属性,不过是用API查询的,
Re: 关于页面属性的几点疑惑,百思不得其解!!求助
一鱼之歌
2009-02-19, 15:38 下午
这属性还真有点迷惑。我用virtualProtectex把页属性修改为PAGE_READWRITE的时候
竟然PTE就标上Copy-on-write的标记!!
Re: 关于页面属性的几点疑惑,百思不得其解!!求助
一鱼之歌
2009-02-19, 15:57 下午
但是呢,我用windows核心编程那个14章节的vmmap例子测试,发现他里面那个地址却没有这个标志位,说明它用的API查找的属性并不是查询这一位。
http://hiphotos.baidu.com/mr_littlefish/pic/item/c0b7e2267c5eba23908f9d30.jpeg