Windbg - PEB Paged Out(虚拟页面大小混乱)

Windbg - PEB Paged Out (Virtual Page Size Confusion)

谁能给我解释一下这是什么意思。 (我把有问题的具体部分加粗了)。

"Start VPN" 字段——在本例中,0x37D9BD30——表示起始虚拟页码。这必须通过将其乘以页面大小来转换为实际地址。您可以使用 ?(计算表达式)命令将该值乘以 0x2000,这是该示例来自的基于 Itanium 的机器的页面大小。

kd> ? 37d9bd3e*2000        
Evaluate expression: 7676040298496 = 000006fb`37a7c000

然后范围的大小可以转换为字节:

kd> ? 37d9bd3e-37d9bd30+1          <--   computes the number of pages
Evaluate expression: 15 = 00000000`0000000f
kd> ? f*2000
Evaluate expression: 122880 = 00000000`0001e000

所以 ExplorerFrame.dll 从地址 0x000006Fb37A7C000 开始并且有 0x1E000 字节大。您可以使用以下方式加载其符号:

kd> .reload /f ExplorerFrame.dll=6fb`37a7c000,1e000

页面大小取决于处理器。调用 GetSystemInfo() [MSDN] gives you the page size in the field SYSTEM_INFO.dwPageSize. Wikipedia 提供执行此操作的代码:

#include <stdio.h>
#include <windows.h>

int main(void) {
    SYSTEM_INFO si;
    GetSystemInfo(&si);

    printf("The page size for this system is %u bytes.\n", si.dwPageSize);

    return 0;
}

有关可能的页面大小,请参阅英特尔 CPU 手册。

  • x86 CPUs 可能有 4k(最常见)、2M(支持 PAE)或 4M(不支持 PAE)
  • x64 CPUs 可能有 4k(最常见)、2M 甚至 1G 页面。它没有 4M,因为所有 x64 CPUs 都支持 PAE
  • Itanium 可能有 4k、8k、64k、256k、1M、4M、16M 或 256M 页