当前位置: 首页 > news >正文

nt!MiInitializeSystemCache函数分析之PointerPte->u.List.NextEntry的由来

第一部分:
1: kd> dd 0xc0304200
c0304200  c10c0000 00000000 00000000 00000000
c0304210  00000000 00000000 00000000 00000000
c0304220  00000000 00000000 00000000 00000000
c0304230  00000000 00000000 00000000 00000000
c0304240  00000000 00000000 00000000 00000000
c0304250  00000000 00000000 00000000 00000000
c0304260  00000000 00000000 00000000 00000000
c0304270  00000000 00000000 00000000 00000000
1: kd> dd 0xc0304300
c0304300  c1100000 00000000 00000000 00000000
c0304310  00000000 00000000 00000000 00000000
c0304320  00000000 00000000 00000000 00000000
c0304330  00000000 00000000 00000000 00000000
c0304340  00000000 00000000 00000000 00000000
c0304350  00000000 00000000 00000000 00000000
c0304360  00000000 00000000 00000000 00000000
c0304370  00000000 00000000 00000000 00000000
1: kd> dd 0xc0304400
c0304400  c1140000 00000000 00000000 00000000
c0304410  00000000 00000000 00000000 00000000
c0304420  00000000 00000000 00000000 00000000
c0304430  00000000 00000000 00000000 00000000
c0304440  00000000 00000000 00000000 00000000


第二部分:
VOID
MiInitializeSystemCache (
    IN ULONG MinimumWorkingSet,
    IN ULONG MaximumWorkingSet
    )


    //
    // Build a free list structure in the PTEs for the system cache.
    //

    MmSystemCachePteBase = MI_PTE_BASE_FOR_LOWEST_KERNEL_ADDRESS;

    SizeOfSystemCacheInPages = MI_COMPUTE_PAGES_SPANNED (MmSystemCacheStart,
                                (PCHAR)MmSystemCacheEnd - (PCHAR)MmSystemCacheStart + 1);

    HunksOf256KInCache = SizeOfSystemCacheInPages / (X256K / PAGE_SIZE);

    PointerPte = MiGetPteAddress (MmSystemCacheStart);

    MmFirstFreeSystemCache = PointerPte;

    for (i = 0; i < HunksOf256KInCache; i += 1) {
        PointerPte->u.List.NextEntry = (PointerPte + (X256K / PAGE_SIZE)) - MmSystemCachePteBase;
        PointerPte += X256K / PAGE_SIZE;
    }

第三部分:

#define PAGE_SIZE                   0x1000
#define X256K 0x40000

1: kd> ?0x40000/0x1000
Evaluate expression: 64 = 00000040

0100 0000
0100 0000 00
01    00 00    00 00    =    0x100

0xc0304000+0x100=0xc0304100
0xc0304100-0xc0000000=0x304100

304100

0011 00    00     0100     0001     0000 0000
 11 00    00     0100     0001     0000 0000 00
 11 00    00     01    00     00    01     00    00 00    00 00    

 11 00    00     01    00     00    01     00    00 00    00 00
c1040

      +0x000 List             : _MMPTE_LIST
         +0x000 Valid            : Pos 0, 1 Bit
         +0x000 OneEntry         : Pos 1, 1 Bit
         +0x000 filler0          : Pos 2, 8 Bits
         +0x000 Prototype        : Pos 10, 1 Bit
         +0x000 filler1          : Pos 11, 1 Bit
         +0x000 NextEntry        : Pos 12, 20 Bits

1: kd> x nt!MmSystemCachePteBase
80b2358c          nt!MmSystemCachePteBase = 0xc0000000

1: kd> dd 0xc0304000
c0304000  c1040000

第四部分:

0xc0304200

0xc0304300

304300
0011 0000 0100 0011 0000 0000

11 0000 0100 0011 0000 0000 00

11 00    00 01    00 00    11 00    00 00    00 00
c10c0

1: kd> dd 0xc0304200
c0304200  c10c0000 00000000 00000000 00000000
c0304210  00000000 00000000 00000000 00000000
c0304220  00000000 00000000 00000000 00000000
c0304230  00000000 00000000 00000000 00000000
c0304240  00000000 00000000 00000000 00000000
c0304250  00000000 00000000 00000000 00000000
c0304260  00000000 00000000 00000000 00000000
c0304270  00000000 00000000 00000000 00000000
1: kd> dd 0xc0304300
c0304300  c1100000 00000000 00000000 00000000
c0304310  00000000 00000000 00000000 00000000
c0304320  00000000 00000000 00000000 00000000
c0304330  00000000 00000000 00000000 00000000
c0304340  00000000 00000000 00000000 00000000
c0304350  00000000 00000000 00000000 00000000
c0304360  00000000 00000000 00000000 00000000
c0304370  00000000 00000000 00000000 00000000
1: kd> dd 0xc0304400
c0304400  c1140000 00000000 00000000 00000000
c0304410  00000000 00000000 00000000 00000000
c0304420  00000000 00000000 00000000 00000000
c0304430  00000000 00000000 00000000 00000000
c0304440  00000000 00000000 00000000 00000000

相关文章:

  • [ Qt ] | 常用控件(三):
  • ArcGIS Pro 3.4 二次开发 - 地理处理
  • 如何通过ES实现SQL风格的查询?
  • 向量数据库对比和选择:Pinecone、Chroma、FAISS、Milvus、Weaviate
  • 分享9款常用的内网穿透软件
  • 把 CURSOR 的工具活动栏改成和 VSCODE 一样的左侧展示
  • apk- 反编译apktools操作方法——请勿乱用-东方仙盟
  • Mac安装MongoDB数据库以及MongoDB Compass可视化连接工具
  • ABP VNext + Apache Flink 实时流计算:打造高可用“交易风控”系统
  • 修改 Ubuntu Installer 从串口输出的方法
  • 设计模式-单一职责原则
  • C语言学习笔记三 --- V
  • ubuntu中,c和c+程序,预编译、编译、链接和运行命令
  • Vue 3.0 中provide常见使用场景
  • 利用 `ngx_http_xslt_module` 实现 NGINX 的 XML → HTML 转换
  • Elasticsearch 如何实现跨数据中心的数据同步?
  • 【md2html python 将 Markdown 文本转换为 HTML】
  • Leetcode 25. K 个一组翻转链表
  • React JSX语法介绍(JS XML)(一种JS语法扩展,允许在JS代码中编写类似HTML的标记语言)Babel编译
  • Spring AI(一)
  • 想制作一个网站怎么来做/网页制作的软件有哪些
  • 烟台网站制作/百度广告联盟下载
  • 手机网站移动应用/百度区域代理
  • 建站之星官网建设/百度集团总部在哪里
  • 网站建设培训网站/游戏代理是怎么赚钱的如何代理游戏
  • 做网站虚拟主机多少钱/软文营销的经典案例