能力值:
( LV2,RANK:15 )
|
-
-
2 楼
插个眼
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
1.KeCapturePersistentThreadState调用的结构里直接就有PteBase,不需要用MmPfnDataBase计算 2.你这个没处理有Shadow的情况 3.不需要定位KeFlushTb,自己Ipi插过去直接自己刷就行,而且中断拉高因为自己当前用刷自己当前的就够了,不需要完整刷
最后于 2020-10-3 23:42
被syser编辑
,原因:
|
能力值:
( LV5,RANK:60 )
|
-
-
4 楼
syser
1.KeCapturePersistentThreadState调用的结构里直接就有PteBase,不需要用MmPfnDataBase计算2.你这个没处理有Shadow的情况3.不需要定位KeFlus ...
PteBase是在某个RS1预览版才被加进去的,但MmPfnDataBase是全版本通用。我只考虑了内核页表的映射,所以就没管Shadow。至于lpi怎么刷倒是要请教一下,我已经在刷TLB这里卡了几天了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
其实这样跟MDL的实现方式差不多,都是映射到新的地址 只是LZ不直接调用MDL,而是做了跟MDL同样的事
|
能力值:
( LV5,RANK:60 )
|
-
-
6 楼
yy虫子yy
其实这样跟MDL的实现方式差不多,都是映射到新的地址
只是LZ不直接调用MDL,而是做了跟MDL同样的事
我写这个纯粹吃饱了撑的,之前很好奇MDL的MmMapLockedPages是如何做到把只读内存映射到可写内存的,现在做个弟中弟版MDL才发现原来写保护只是基于虚拟地址而非物理地址
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
hhkqqs
我写这个纯粹吃饱了撑的,之前很好奇MDL的MmMapLockedPages是如何做到把只读内存映射到可写内存的,现在做个弟中弟版MDL才发现原来写保护只是基于虚拟地址而非物理地址
吃饱了撑的也是一种值得发扬的精神
|
能力值:
( LV5,RANK:60 )
|
-
-
8 楼
自顶一波
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
mark
最后于 2020-10-8 12:16
被Caim Astraea编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
mark
|
能力值:
( LV4,RANK:40 )
|
-
-
11 楼
走一条没有人走过的路..才是最好的...
|
能力值:
( LV10,RANK:160 )
|
-
-
12 楼
mark
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
mark
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
插眼
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
mark,虽然不搞内核
|
能力值:
( LV3,RANK:27 )
|
-
-
16 楼
操作的其实是R/W位、bit6的Dirty位,其含义并非控制可读可写。 YY(估计是受最后放出的那个结构的影响)
|
能力值:
( LV3,RANK:27 )
|
-
-
17 楼
“笔者发现当前的Intel CPU支持的虚拟地址寻址最大位数限制为48位,对于64位Windows来说,第47位被用来区分用户层虚拟地址和内核层虚拟地址,即内核层地址实际上只有47位的有效” 说明: 这有点渊源、Intel CPU其实有支持64位的、就是所谓的IA64架构。只不过用的不多、而且也和32位完全不兼容。而当时AMD出的AMD64架构、就是目前被广泛采用的结构、其规定最高的那几位为符号位。由此还引出一个规范性地址的说法。之所以能够流行、主要是因为此结构兼容32位地址结构、而且,即使有几位没用,也已经可以访问足够大的地址空间了。故此,现在所说的x64之类的、几乎都是这种架构。 所以、Intel有些手册上没有的一部分、AMD手册上则都能找到讷
|
能力值:
( LV5,RANK:60 )
|
-
-
18 楼
GhostValley
“笔者发现当前的Intel CPU支持的虚拟地址寻址最大位数限制为48位,对于64位Windows来说,第47位被用来区分用户层虚拟地址和内核层虚拟地址,即内核层地址实际上只有47位的有效”
说明: ...
从报道来看,48位虚拟地址这种设计是Intel跟风AMD的结果,9999-12这种结构也确实完美兼容了32位的299-12,至于Intel有没有后悔这波跟风就是另一回事了。
|
能力值:
( LV5,RANK:60 )
|
-
-
19 楼
GhostValley
操作的其实是R/W位、bit6的Dirty位,其含义并非控制可读可写。YY(估计是受最后放出的那个结构的影响)
感谢提醒,之前查了些资料,也大概了解这两个位跟可写没什么关系,只是在linux中,新分配的页若没有置位Dirty,尝试写入会触发异常,后来发现在Windows里也是一样,我是挺好奇这个异常是从哪里分发的,请大佬不吝赐教
|
能力值:
( LV3,RANK:27 )
|
-
-
20 楼
hhkqqs
感谢提醒,之前查了些资料,也大概了解这两个位跟可写没什么关系,只是在linux中,新分配的页若没有置位Dirty,尝试写入会触发异常,后来发现在Windows里也是一样,我是挺好奇这个异常是从哪里分发 ...
“这两个位跟可写没什么关系” 0x42,bit1是R/W位、bit6是Dirty位,bit1就是控制当前物理页是否可读可写的。我意在说明您说的Dirty其实已经是包含了对R/W位的操作的。
|
能力值:
( LV3,RANK:27 )
|
-
-
21 楼
GhostValley
“这两个位跟可写没什么关系” 0x42,bit1是R/W位、bit6是Dirty位,bit1就是控制当前物理页是否可读可写的。我意在说明您说的Dirty其实已经是包含了对R/W位的操作的。
只写入0x2应该也行吧
|
能力值:
( LV3,RANK:27 )
|
-
-
22 楼
yy虫子yy
其实这样跟MDL的实现方式差不多,都是映射到新的地址
只是LZ不直接调用MDL,而是做了跟MDL同样的事
兄弟说的不大准确: MDL结构和这个比起来、属于"上层应用"的范畴、MDL最后未文档化的PFN是其本质; 这篇文章则不同、其层面要靠下。
|
能力值:
( LV5,RANK:60 )
|
-
-
23 楼
GhostValley
只写入0x2应该也行吧
试了一下确实没必要改bit6,关键步骤就两步,改bit1+刷tlb
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
插眼
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
mark,敬佩楼主。
|
|
|