nt!MiSessionAddProcess函数分析和nt!MmSessionSpace全局变量的关系

第一部分:
1: kd> g
Breakpoint 42 hit
nt!MiSessionAddProcess:
80ab2fbe 55              push    ebp
1: kd> kc
 #
00 nt!MiSessionAddProcess
01 nt!MmCreateProcessAddressSpace
02 nt!PspCreateProcess
03 nt!NtCreateProcessEx
04 nt!_KiSystemService
05 SharedUserData!SystemCallStub
06 ntdll!NtCreateProcessEx
07 kernel32!CreateProcessInternalW
08 kernel32!CreateProcessW
09 winlogon!StartSystemProcess
0a winlogon!ExecSystemProcesses
0b winlogon!WinMain
0c winlogon!WinMainCRTStartup


#define SESSION_GLOBAL(_Session)    (_Session->GlobalVirtualAddress)

第二部分:
1: kd> x nt!MmSessionSpace
80bf0048          nt!MmSessionSpace = 0xbf7f0000
1: kd> dx -r1 ((ntkrnlmp!_MM_SESSION_SPACE *)0xbf7f0000)
((ntkrnlmp!_MM_SESSION_SPACE *)0xbf7f0000)                 : 0xbf7f0000 [Type: _MM_SESSION_SPACE *]
    [+0x000] GlobalVirtualAddress : 0xf79b1000 [Type: _MM_SESSION_SPACE *]

0xf79b1000

1: kd> dx -r1 ((ntkrnlmp!_MM_SESSION_SPACE *)0xbf7f0000)
((ntkrnlmp!_MM_SESSION_SPACE *)0xbf7f0000)                 : 0xbf7f0000 [Type: _MM_SESSION_SPACE *]
    [+0x000] GlobalVirtualAddress : 0xf79b1000 [Type: _MM_SESSION_SPACE *]
    [+0x004] ReferenceCount   : 0x2 [Type: unsigned long]
    [+0x008] u                [Type: __unnamed]
    [+0x00c] SessionId        : 0x0 [Type: unsigned long]
    [+0x010] ProcessList      [Type: _LIST_ENTRY]
    [+0x018] LastProcessSwappedOutTime : {0} [Type: _LARGE_INTEGER]
    [+0x020] SessionPageDirectoryIndex : 0x7b44e [Type: unsigned long]
    [+0x024] NonPagablePages  : 0x10 [Type: unsigned long]
    [+0x028] CommittedPages   : 0x3e [Type: unsigned long]
    [+0x02c] PagedPoolStart   : 0xbc000000 [Type: void *]
    [+0x030] PagedPoolEnd     : 0xbc3fffff [Type: void *]
    [+0x034] PagedPoolBasePde : 0xc0300bc0 [Type: _MMPTE *]
    [+0x038] Color            : 0x37 [Type: unsigned long]
    [+0x03c] ProcessOutSwapCount : 0x0 [Type: unsigned long]
    [+0x040] SessionPoolAllocationFailures [Type: unsigned long [4]]
    [+0x050] ImageList        [Type: _LIST_ENTRY]
    [+0x058] LocaleId         : 0x409 [Type: unsigned long]
    [+0x05c] AttachCount      : 0x0 [Type: unsigned long]
    [+0x060] AttachEvent      [Type: _KEVENT]
    [+0x070] LastProcess      : 0x0 [Type: _EPROCESS *]
    [+0x074] ProcessReferenceToSession : 2 [Type: long]
    [+0x078] WsListEntry      [Type: _LIST_ENTRY]
    [+0x080] Lookaside        [Type: _GENERAL_LOOKASIDE [26]]
    [+0xd80] Session          [Type: _MMSESSION]
    [+0xdc0] PagedPoolMutex   [Type: _KGUARDED_MUTEX]
    [+0xde0] PagedPoolInfo    [Type: _MM_PAGED_POOL_INFO]
    [+0xe00] Vm               [Type: _MMSUPPORT]
    [+0xe60] Wsle             : 0xbf400038 [Type: _MMWSLE *]
    [+0xe64] Win32KDriverUnload : 0xbf8aaad0 [Type: void (*)(_DRIVER_OBJECT *)]
    [+0xe68] PagedPool        [Type: _POOL_DESCRIPTOR]
    [+0x1e98] PageTables       : 0x89579e00 [Type: _MMPTE *]
    [+0x1e9c] ImageLoadingCount : 0 [Type: long]
    [+0x1ea0] Debug            [Type: unsigned long [56]]
    [+0x1f80] Debug2           [Type: _MM_SESSION_MEMORY_COUNTERS [8]]


第三部分:
1: kd> dt nt!MmSessionPoolSize
0x400000
1: kd> dt nt!MiSessionPoolStart
0xbc000000
1: kd> dt nt!MiSessionViewStart
0xbc400000

1: kd> lm
start        end                module name
bf800000 bfa9a000       win32k         (private pdb symbols)  j:\retail-checked\sys\win32k.pdb

1: kd> dt nt!MiSessionImageStart
0xbf800000


BOOLEAN
MmInitSystem (
    IN ULONG Phase,
    IN PLOADER_PARAMETER_BLOCK LoaderBlock
    )
{


        //
        // Initialize some global session variables.
        //

        MmSessionSpace = (PMM_SESSION_SPACE)((ULONG_PTR)MmSessionBase + MmSessionSize - MmSessionImageSize - MI_SESSION_SPACE_STRUCT_SIZE);

MmSessionSpace=0xbc000000+0x4000000-0x800000-0x10000=0xbf7f0000


1: kd> dt nt!MmSessionBase
0xbc000000
1: kd> dt nt!MmSessionSize
0x4000000
1: kd> dt nt!MmSessionImageSize
0x800000
#define MI_SESSION_SPACE_STRUCT_SIZE MM_ALLOCATION_GRANULARITY
#define MM_ALLOCATION_GRANULARITY ((ULONG)0x10000)


 Virtual memory layout of session space when loaded down from 0xC0000000.

  Note that the sizes of mapped views, paged pool and images are registry
  tunable on 32-bit systems (if NOT booted /3GB, as 3GB has very limited
  address space).

                 +------------------------------------+
        C0000000 |                                    |
                 | win32k.sys, video drivers and any  |
                 | rebased NT4 printer drivers.       |
                 |                                    |
                 |             (8MB)                  |
                 |                                    |
                 +------------------------------------+
        BF800000 |                                    |
                 |   MM_SESSION_SPACE & Session WSLs  |
                 |              (4MB)                 |
                 |                                    |
                 +------------------------------------+
        BF400000 |                                    |
                 |   Mapped views for this session    |
                 |     (20MB by default, but is       |
                 |      registry configurable)        |
                 |                                    |
                 +------------------------------------+
        BE000000 |                                    |
                 |   Paged pool for this session      |
                 |     (16MB by default, but is       |
                 |      registry configurable)        |
                 |                                    |
        BD000000 +------------------------------------+


第四部分:函数返回后


1: kd> dx -r1 (*((ntkrnlmp!_LIST_ENTRY *)0xbf7f0010))                
(*((ntkrnlmp!_LIST_ENTRY *)0xbf7f0010))                 [Type: _LIST_ENTRY]
    [+0x000] Flink            : 0x895ea304 [Type: _LIST_ENTRY *]
    [+0x004] Blink            : 0x89544304 [Type: _LIST_ENTRY *]
1: kd> dx -r1 ((ntkrnlmp!_LIST_ENTRY *)0x895ea304)
((ntkrnlmp!_LIST_ENTRY *)0x895ea304)                 : 0x895ea304 [Type: _LIST_ENTRY *]
    [+0x000] Flink            : 0x895140d4 [Type: _LIST_ENTRY *]
    [+0x004] Blink            : 0xf79b1010 [Type: _LIST_ENTRY *]
1: kd> dx -r1 ((ntkrnlmp!_LIST_ENTRY *)0x89544304)
((ntkrnlmp!_LIST_ENTRY *)0x89544304)                 : 0x89544304 [Type: _LIST_ENTRY *]
    [+0x000] Flink            : 0xf79b1010 [Type: _LIST_ENTRY *]
    [+0x004] Blink            : 0x895140d4 [Type: _LIST_ENTRY *]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年消防设施操作员考试题库及答案

一、判断题 31.消防用水不作他用的技术措施应每季度进行检查,若发现故障应及时进行处理。() 答案:错误 解析:本题考查的是消防水池、高位消防水箱的保养方法。每月检查消防用水不作他用的技术措施,发现故…

Ray开源程序 是用于扩展 AI 和 Python 应用程序的统一框架。Ray 由一个核心分布式运行时和一组用于简化 ML 计算的 AI 库组成

​一、软件介绍 文末提供程序和源码下载 Ray开源程序 是用于扩展 AI 和 Python 应用程序的统一框架。Ray 由一个核心分布式运行时和一组用于简化 ML 计算的 AI 库组成 二、Ray AI 库的更多信息 数据:适用于 ML 的可扩展数据集训练:分布式训练Tune&…

软件设计师-软考知识复习(3)

在磁盘上存储数据的排列方式会影响I/O服务的总时间。假设每个磁道被划分成10个物理块,每个物理块存放1个逻辑记录。逻辑记录R1,R2…R10存放在同一个磁道上,记录的排列从1到10。 假定磁盘的旋转速度为10ms/周,磁头当前处在R1的开始处。若系统…

Unity Editor 扩展:查找缺失的 Image Sprite

在 Unity 开发过程中,缺失的 Sprite 引用(特别是在 UI 元素上)可能导致程序运行时出现问题,尤其是在使用 Image 组件时。当你拥有多个 Prefab 和大量的 UI 资源时,手动检查每个 Prefab 是否缺失了 Source Image 变得十…

在VTK中使用VTKCamera

文章目录 概要Cpp代码概要 在VTK(Visualization Toolkit)中,vtkCamera 类用于控制三维场景中相机的视角。相机决定了你从哪个角度和位置观察三维场景。使用 vtkCamera 的一般步骤包括创建相机对象、配置相机参数、将相机设置为渲染器的活动相机,以及更新相机视图。 Cpp代…

【Docker系列】使用格式化输出与排序技巧

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

临床智能体AI与环境感知AI的融合:基于python的医疗自然语言处理深度分析

引言 医疗领域的数智化进程正以前所未有的速度推进,人工智能技术的应用尤为显著。随着大型语言模型(LLMs)的迅猛发展,医疗AI已从简单的辅助工具升级为复杂的智能体系统。临床智能体AI与环境感知AI的融合代表了医疗AI的最新发展方向,为重塑医疗运营自然语言处理提供了全新…

JAVA SE(9)——多态

1.多态的概念&作用 多态(Polymorphism)是面向对象编程的三大基本特性之一(封装和继承已经讲过了),它允许不同类的对象对同一消息做出不同的响应。具体来说,多态允许基类/父类的引用指向派生类/子类的对象(向上转型…

GPS定位方案

目录 一、常用的GPS定位方案包括: 二、主流品牌及热销型号 三、常用GPS算法及核心逻辑: 一、基础定位算法 二、高精度算法 三、辅助优化算法 四、信号处理底层算法 四、基本原理(想自己写算法的琢磨一下原理) 一、常用的GP…

PCIe - ZCU106(RC) + KU5P(EP) + 固化

目录 1. 简介 1.1 Data Mover 1.2 描述符 2. ZCU102 2.1 Ubuntu OS 2.2 USB Host 2.2.1 连接拓扑 2.2.2 设备类型 2.2.3 USB 跳帽设置 2.3 无线网卡 2.4 PCIe Info 2.4.1 Diagram 2.4.2 lspci -tv 2.4.3 lspci -v 2.4.2.1 设备基本信息 2.4.2.2 控制与状态寄存…

精益数据分析(43/126):媒体网站商业模式的盈利与指标解析

精益数据分析(43/126):媒体网站商业模式的盈利与指标解析 在创业和数据分析的学习旅程中,我们不断探索各种商业模式的奥秘,今天让我们一同深入《精益数据分析》,聚焦媒体网站商业模式,剖析其盈…

Android数据库全栈开发实战:Room+SQLCipher+Hilt企业级应用构建

简介 在移动应用开发中,数据库作为数据存储的核心组件,其安全性和性能对企业级应用至关重要。本文将从零开始,全面讲解Android数据库开发的最新技术,包括Room框架的深度使用、SQLCipher加密数据库的实现、Hilt依赖注入的集成以及前后端数据同步的完整方案。通过一个加密任…

HarmonyOS 5.0 低时延音视频开发​​

大家好,我是 V 哥。 在HarmonyOS 5.0的开发中,支持低时延音视频开发,为了确保语法正确, V 哥以下代码符合HarmonyOS NEXT API 14的规范。为了方便初学者更好入门,V 哥伙同2位小伙伴花了1年时间,搞了三本鸿蒙…

微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT

微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT 数据集准备常用数据集自定义数据集AlpacaShareGPT数据集准备 常用数据集 预训练数据集 Wiki Demo (en)RefinedWeb (en)RedPajama V2 (en)Wikipedia (en)Wikipedia (zh)Pile (en)

2025年OpenAI重大架构调整:资本与使命的再平衡

目录 前言 一、调整核心:三重架构的重构 1.1 控制权的重新锚定 1.2 营利部门的角色转型 1.3 资金池的重新配置 二、调整动因:三重矛盾的破解 2.1 资金需求与融资限制的冲突 2.2 商业竞争与使命纯度的博弈 2.3 内部治理与外部监管的张力 三、产…

GD32/STM32 ADC/DMA使用指南

首先我们对ADC及DMA的基础知识作一下简单介绍。 一、 GD32/STM32 ADC模块的核心要点 一)、ADC基础特性 ‌12位逐次逼近型‌ GD32/STM32 ADC为12位分辨率,最大量化值为4095(对应3.3V参考电压),支持0-3.3V模拟输入范…

Linux(十四)进程间通信(IPC),管道

一、进程间通信 (一)系统介绍进程间通信 进程间通信(IPC)介绍 小编插入的这篇文章详细介绍了进程间通信的一些内容,大家可以一起学习。 (二)进程间通信的方法 1、管道 2、信号量 3、共享…

使用Homebrew下载配置git和连接GitHub(Mac版)

本文详细介绍了在M系列Mac上安装Homebrew并配置Git的过程,包括git的下载、设置全局用户名和邮箱、生成SSH密钥、添加GitHubSSH密钥以及终端验证。这些步骤有助于用户顺利进行协同开发。 一、下载git 1、终端输入一下命令 brew install git2、这时下载完成 二、配…

悬崖边的摄影牧歌

在云雾缭绕的悬崖边,一场独属于自然与光影的邂逅悄然上演。 摄影师伫立于此,身旁是一群灵动的羊。他架起相机,眼神专注而炽热,仿佛要将这天地间的一切都收纳进小小的取景器。悬崖陡峭,岩石冷峻,却因羊群的洁…

Linux环境基础与开发工具使用

1. Linux编译器vim 1.1 vim的基本概念讲解 vim有很多种模式,我们初学者常用的就是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)。 命令/正常模式(Normal mode) …