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

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.xdnf.cn/news/3870.html

相关文章:

  • DeepSeek Copilot idea插件推荐
  • 架构思维:使用懒加载架构实现高性能读服务
  • 运算放大器的主要技术指标
  • 【浅尝Java】变量与数据类型(含隐式类型转换、强制类型转换、整型与字符串互相转换等)
  • JWT解析
  • WebRTC 服务器之Janus视频会议插件信令交互
  • docker:制作镜像+上传镜像+拉取镜像
  • 前端 uni-app 初步使用指南
  • javaEE——单例模式
  • FreeRTOS菜鸟入门(十)·消息队列
  • MySQL用户管理
  • 以下是在 Ubuntu 上的几款PDF 阅读器,涵盖轻量级、功能丰富和特色工具:
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: [1]如何加载动态链接库, 并无缝支持原生底层开发?
  • iview 表单验证问题 Select 已经选择 还是弹验证提示
  • 【Java 并发编程】线程的基本使用(持续更新优化)
  • 【沐风老师】3DMAX按元素UV修改器插件教程
  • Ubuntu环境下使用uWSGI服务器【以flask应用部署为例】
  • 【2025软考高级架构师】——知识脑图总结
  • Spring AI聊天模型API:轻松构建智能聊天交互
  • 软考-软件设计师中级备考 12、软件工程
  • nginx 正反向代理和nginx正则
  • 数据分析之药物-基因-代谢物
  • RAGFlow 接入企业微信应用实现原理剖析与最佳实践
  • IP 协议
  • 性能优化实践:内存优化技巧
  • iview 老版本合并单元格
  • 基于Hive + Spark离线数仓大数据实战项目(视频+课件+代码+资料+笔记)
  • Linux环境部署iview-admin项目
  • gitblit安装教程,搭建一个属于自己的Git版本仓库
  • Python读取comsol仿真导出数据并绘图