全 1 的 MiNotMapped PFN 条目和全 0 和 0 PteAddress 的 MiNonCached PFN 条目之间有什么区别?

逆向工程 视窗 风袋
2021-07-05 02:26:03

在主机上(UEFI 传统模式):

lkd> !pfn 0xf0
    PFN 000000F0 at address FFFFFA8000002D00
    flink       FFFFFFFFFFFFFFFF  blink / share count FFFFFFFFFFFFFFFF  pteaddress FFFFFFFFFFFFFFFF
    reference count FFFF    used entry count  FFFF      NotMapped color 3F   Priority 7
    restore pte FFFFFFFFFFFFFFFF  containing page        FFFFFFFFFFFFF  Trans      MPRWEXY
    Modified Shared ReadInProgress WriteInProgress InPageError ParityError RemovalRequested

在 VM(传统 BIOS)上:

kd> !pfn 0xf0
    PFN 000000F0 at address FFFFFA8000002D00
    flink       00000000  blink / share count 00000000  pteaddress 00000000
    reference count 0000    used entry count  0000      NonCached color 0   Priority 0
    restore pte 00000000  containing page        000000  Zeroed                            

因为记录!db 0xf0000在两台机器上都能正常工作,并且!db 在两台机器上执行瞬时映射之前和之后 PFN 条目是相同的第一个可能是一个愚蠢的 kd -kl / livekd 问题吗?

好奇的。我认为可能是 0xf0 从未被映射,而不是映射然后未映射,并且出于某种原因保留为 MiNonCached 而不是 MiNotMapped(并且在取消映射缓存区域时它可能会或可能不会将其返回到 MiNotMapped,但我没有知道)。我原以为这个范围永远不会映射到 ntoskrnl 上,因为它不应该使用 BIOS 服务。

在主机上:

lkd> !pfn 0xf1
    PFN 000000F1 at address FFFFFA8000002D30
    flink       FFFFFFFFFFFFFFFF  blink / share count FFFFFFFFFFFFFFFF  pteaddress B47756FFFFE9FFFF
    reference count 517C    used entry count  B4E9      Cached    color 2D   Priority 7
    restore pte FFFFFFFFFFFFFFFF  containing page        756FFFFE9FFFF  Bad           WEXY
          WriteInProgress InPageError ParityError RemovalRequested

这次是“缓存”,并且显然包含垃圾,因此问题的 MiNotMapped 部分可能无关紧要,也许应该是垃圾 PFN 条目和零初始化条目之间的区别什么?

0个回答
没有发现任何回复~