nt!MiAllocateWsle函數分析之設置Wsle[WorkingSetIndex]

第一部分:

1: kd> p
nt!MiAddValidPageToWorkingSet+0xa9:
80a83c13 e8da9afcff????? call??? nt!MiAllocateWsle (80a4d6f2)
1: kd> t
nt!MiAllocateWsle:
80a4d6f2 55????????????? push??? ebp
1: kd> dv
???????? WsInfo = 0x8953a1f8
???? PointerPte = 0xc01df8a8
?????????? Pfn1 = 0x81bcd810
?????? WsleMask = 0x118
?????????? Wsle = 0x00000008
WorkingSetIndex = 0x8953a1f8


第二部分:

1: kd> dx -r1 ((ntkrnlmp!_MMWSL *)0xc0503000)
((ntkrnlmp!_MMWSL *)0xc0503000)???????????????? : 0xc0503000 [Type: _MMWSL *]
??? [+0x000] FirstFree??????? : 0xc3 [Type: unsigned long]


?? WorkingSetIndex = WorkingSetList->FirstFree;
??? WorkingSetList->FirstFree = (WSLE_NUMBER)(Wsle[WorkingSetIndex].u1.Long >> MM_FREE_WSLE_SHIFT);


1: kd> dd 0xc0503698+c3*4
c05039a4? 00000c40 00000c50 00000c60 00000c70

WorkingSetList->FirstFree=c4

??? if (WorkingSetIndex > WorkingSetList->LastEntry) {
??????? WorkingSetList->LastEntry = WorkingSetIndex;
??? }

1: kd> dx -r1 ((ntkrnlmp!_MMWSL *)0xc0503000)
((ntkrnlmp!_MMWSL *)0xc0503000)???????????????? : 0xc0503000 [Type: _MMWSL *]
??? [+0x000] FirstFree??????? : 0xc4 [Type: unsigned long]
??? [+0x004] FirstDynamic???? : 0x4 [Type: unsigned long]
??? [+0x008] LastEntry??????? : 0xc3 [Type: unsigned long]


第三部分:

#define MiGetVirtualAddressMappedByPte(PTE) ((PVOID)((ULONG)(PTE) << 10))

???? PointerPte = 0xc01df8a8


1100 0000 0001 1101 1111 1000 1010 1000

01 11? 01 11? 11 10? 00 10? 10 10? 00 00 0000 0000

77e2a000

參考后總結:得到的確實是虛擬地址,PTE左移10位 得到虛擬地址前20位!!
虛擬地址右移10位+0xC000 0000 得到PTE

1: kd> dv
StoreInstruction = 0
?FaultingAddress = 0x77e2a0c8


1: kd> !pte 0x77e2a0c8
???????????????? VA 77e2a0c8
PDE at C030077C???????? PTE at C01DF8A8
contains 7B259867?????? contains 7DE56025
pfn 7b259 ---DA--UWEV?? pfn 7de56 ----A--UREV


第四部分:

1: kd> t
nt!MiAllocateWsle+0x14d:
80a4d83f e80aaeffff????? call??? nt!MiUpdateWsle (80a4864e)
1: kd> t
nt!MiUpdateWsle:
80a4864e 55????????????? push??? ebp
1: kd> kc
?#
00 nt!MiUpdateWsle
01 nt!MiAllocateWsle
02 nt!MiAddValidPageToWorkingSet
03 nt!MiCompleteProtoPteFault
04 nt!MiResolveProtoPteFault
05 nt!MiDispatchFault
06 nt!MmAccessFault
07 nt!_KiTrap0E
08 nt!ObpCaptureObjectName
09 nt!ObpCaptureObjectCreateInformation
0a nt!ObOpenObjectByName
0b nt!NtOpenSection
0c nt!_KiSystemService
0d SharedUserData!SystemCallStub
0e ntdll!NtOpenSection
0f KERNEL32!OpenSection
10 KERNEL32!GetLocaleFileInfo
11 KERNEL32!NlsProcessInitialize
12 KERNEL32!NlsDllInitialize
13 KERNEL32!BaseDllInitialize
14 ntdll!LdrpCallInitRoutine
15 ntdll!LdrpRunInitializeRoutines
16 ntdll!LdrpLoadDll
17 ntdll!LdrLoadDll
18 CSRSRV!CsrLoadServerDll
19 CSRSRV!CsrParseServerCommandLine
1a CSRSRV!CsrServerInitialization
1b csrss!main
1c csrss!NtProcessStartup

1: kd> dv
?? DesiredIndex = 0xf704b9f0
?VirtualAddress = 0x77e2a000
???????? WsInfo = 0x8953a1f8
??????????? Pfn = 0x81bcd810
?????????? Wsle = 0x80a4864e


第五部分:

??? WsleContents.u1.VirtualAddress = PAGE_ALIGN (VirtualAddress);
??? WsleContents.u1.e1.Valid = 1;


1: kd> dt mmwsle -r
nt!MMWSLE
?? +0x000 u1?????????????? : __unnamed
????? +0x000 VirtualAddress?? : Ptr32 Void
????? +0x000 Long???????????? : Uint4B
????? +0x000 e1?????????????? : _MMWSLENTRY
???????? +0x000 Valid??????????? : Pos 0, 1 Bit
???????? +0x000 LockedInWs?????? : Pos 1, 1 Bit
???????? +0x000 LockedInMemory?? : Pos 2, 1 Bit
???????? +0x000 Protection?????? : Pos 3, 5 Bits
???????? +0x000 SameProtectAsProto : Pos 8, 1 Bit
???????? +0x000 Direct?????????? : Pos 9, 1 Bit
???????? +0x000 Age????????????? : Pos 10, 2 Bits
???????? +0x000 VirtualPageNumber : Pos 12, 20 Bits

0x77e2a001


第六部分:

WorkingSetIndex = 0xc3

1: kd> dd 0x81bcd810
81bcd810? 00000000 e13a9c10 00000001 00011608
81bcd820? f926946a 000007ec


?? +0x00c u3?????????????? : __unnamed
????? +0x000 e1?????????????? : _MMPFNENTRY
???????? +0x000 Modified???????? : Pos 0, 1 Bit
???????? +0x000 ReadInProgress?? : Pos 1, 1 Bit
???????? +0x000 WriteInProgress? : Pos 2, 1 Bit
???????? +0x000 PrototypePte???? : Pos 3, 1 Bit?? ?1

??????? if (Pfn->u3.e1.PrototypePte == 0) {

??????? }
??????? else {

??????????? OldValue = InterlockedCompareExchange ((PLONG)&Pfn->u1.Event,
?????????????????????????????????????????????????? WorkingSetIndex,
?????????????????????????????????????????????????? 0);


1: kd> dd 0x81bcd810
81bcd810? 000000c3 e13a9c10 00000001 00011608?? ??? ?//000000c3
81bcd820? f926946a 000007ec

第七部分:

??????? if (OldValue == 0) {

??????????? WsleContents.u1.e1.Direct = 1;?? ??? ?-->0x77e2a201

??????????? MI_LOG_WSLE_CHANGE (WorkingSetList, WorkingSetIndex, WsleContents);

??????????? Wsle[WorkingSetIndex] = WsleContents;

??????????? return;


1: kd> dt mmwsle -r
nt!MMWSLE
?? +0x000 u1?????????????? : __unnamed
????? +0x000 VirtualAddress?? : Ptr32 Void
????? +0x000 Long???????????? : Uint4B
????? +0x000 e1?????????????? : _MMWSLENTRY
???????? +0x000 Valid??????????? : Pos 0, 1 Bit
???????? +0x000 LockedInWs?????? : Pos 1, 1 Bit
???????? +0x000 LockedInMemory?? : Pos 2, 1 Bit
???????? +0x000 Protection?????? : Pos 3, 5 Bits
???????? +0x000 SameProtectAsProto : Pos 8, 1 Bit
???????? +0x000 Direct?????????? : Pos 9, 1 Bit

0x77e2a001
0000 0000 0001
0010 0000 0001
0x77e2a201


1: kd> p
nt!MiUpdateWsle+0x178:
80a487c6 890c90????????? mov???? dword ptr [eax+edx*4],ecx
1: kd> r
eax=c0503698 ebx=77e2a001 ecx=77e2a201 edx=000000c3 esi=c0503000 edi=81bcd810

1: kd> dd c0503698+c3*4
c05039a4? 00000c40 00000c50 00000c60 00000c70

Wsle[WorkingSetIndex] = WsleContents;


1: kd> dd c0503698+c3*4
c05039a4? 77e2a201 00000c50 00000c60 00000c70

第八部分:返回到nt!MiAllocateWsle

1: kd> p
nt!MiAllocateWsle+0x15c:
80a4d84e 8b45fc????????? mov???? eax,dword ptr [ebp-4]


??? if (WsleMask != 0) {
??????? Wsle[WorkingSetIndex].u1.Long |= WsleMask;?? ??? ?//添加上掩碼。
??? }


?????? WsleMask = 0x118

1: kd> dd c0503698+c3*4
c05039a4? 77e2a201

0x77e2a201+0x118=0x77e2a319


1: kd> p
nt!MiAllocateWsle+0x15f:
80a4d851 8d04b8????????? lea???? eax,[eax+edi*4]
1: kd> p
nt!MiAllocateWsle+0x162:
80a4d854 0908??????????? or????? dword ptr [eax],ecx
1: kd> r
eax=c05039a4 ebx=0fffffff ecx=00000118


??????? Wsle[WorkingSetIndex].u1.Long |= WsleMask;之后

1: kd> dd c0503698+c3*4
c05039a4? 77e2a319

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81109.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81109.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81109.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker 命令操作大全

1 Docker Hello World 簡單命令 docker run ubuntu:15.10 /bin/echo "Hello world" docker run&#xff1a;啟動一個新容器。 ubuntu:15.10&#xff1a;使用的 Docker 鏡像&#xff08;Ubuntu 15.10 版本&#xff09;。 Docker 首先從本地主機上查找鏡像是否存在&a…

【軟件工程】基于機器學習的多缺陷定位

基于機器學習的多缺陷定位&#xff08;Multi-Dault Localization, MDL&#xff09;是軟件工程和自動化測試領域的重要研究方向&#xff0c;旨在通過機器學習技術高效識別代碼中多個潛在缺陷的位置。以下從方法、挑戰、應用場景及未來方向展開分析&#xff1a; 一、核心方法 監督…

用MCP往ppt文件里插入系統架構圖

文章目錄 一、技術架構解析1. Markdown解析模塊(markdown_to_hierarchy)2. 動態布局引擎(give_hierarchy_positions)3. PPTX生成模塊(generate_pptx)二、核心技術亮點1. 自適應布局算法2. MCP服務集成三、工程實踐建議1. 性能優化方向2. 樣式擴展方案3. 部署實踐四、應用…

CS016-2-unity ecs

目錄 【23】射擊改進 【24】僵尸生成器 ?編輯【25】隨機行走 【27】射擊光效 【23】射擊改進 a. 當距離目標太遠的時候&#xff0c;要繼續移動。而當距離目標到達攻擊距離之后&#xff0c;則停止移動。 上圖中的if&#xff1a;判斷自身和目標的距離是否大于攻擊距離&#…

新能源汽車制動系統建模全解析——從理論到工程應用

《純電動輕卡制動系統建模全解析&#xff1a;車速-阻力擬合、剎車力模型與旋轉質量轉換系數優化》 摘要 本文以純電動輕卡為研究對象&#xff0c;系統解析制動系統建模核心參數優化方法&#xff0c;涵蓋&#xff1a; 車速-阻力曲線擬合&#xff08;MATLAB實現與模型驗證&…

函數專題1

函數的定義 函數的基本寫法如下所示&#xff1a; def function_name(parameter1, parameter2, ...):"""Docstring: 描述函數的功能、參數和返回值 (可選但強烈推薦)"""# 函數體: 實現功能的代碼# ...return value # 可選&#xff0c;用于返回結…

紅黑樹:數據世界的平衡守護者

在 C 算法的神秘森林里&#xff0c;紅黑樹是一棵充滿智慧的 “魔法樹”。它既不像普通二叉搜索樹那樣容易失衡&#xff0c;也不像 AVL 樹對平衡要求那么苛刻。作為 C 算法小白&#xff0c;今天就和大家一起深入探索紅黑樹的奧秘&#xff0c;看看它是如何成為數據世界的平衡守護…

【hot100-動態規劃-139.單詞拆分】

力扣139.單詞拆分 本題要求判斷給定的字符串 s 是否可以被空格拆分為一個或多個在字典 wordDict 中出現的單詞,且不要求字典中出現的單詞全部都使用,并且字典中的單詞可以重復使用,這是一個典型的動態規劃問題。 動態規劃思路 定義狀態: 定義一個布爾類型的數組 dp,其中…

ZFile與Cpolar技術結合實現遠程數據實時訪問與集中管理的可行性分析

文章目錄 前言1.關于ZFile2.本地部署ZFile3.ZFile本地訪問測試4.ZFile的配置5.cpolar內網穿透工具安裝6.創建遠程連接公網地址7.固定ZFile公網地址 前言 在信息爆炸的年代&#xff0c;每個現代人都在數字浪潮中扮演著獨特的角色。不論是商務精英、影像創作者還是學術達人&…

Vue2在子組件上使用v-model實現數據的雙向綁定、.sync修飾符

1、v-model 先看示例&#xff1a; //父組件<template><ChildComponent v-model"parentData" /> </template><script> import ChildComponent from ./ChildComponent.vue;export default {components: {ChildComponent},data() {return {pa…

自學嵌入式 day 18 - 數據結構 1

數據結構 相互之間存在一種或多種特定關系的數據元素的集合 1.特定關系&#xff1a; &#xff08;1&#xff09;邏輯結構&#xff1a; ①集合&#xff1a;所有在同一個集合中&#xff0c;關系平等。 ②線性關系&#xff1a;數據和數據之間是一對一的關系。&#xff08;數組…

《Java 大視界——Java 大數據在智能電網分布式能源協同調度中的應用與挑戰》

隨著風電、光伏等分布式能源大規模接入電網&#xff0c;傳統調度系統面臨數據規模激增、響應延遲顯著、多源異構數據融合困難等核心問題。本文聚焦Java生態下的大數據技術體系&#xff0c;深入探討其在智能電網實時監測、負荷預測、資源優化配置等場景中的落地實踐。通過分析Sp…

解密企業級大模型智能體Agentic AI 關鍵技術:MCP、A2A、Reasoning LLMs-MCP大模型上下文解析

解密企業級大模型智能體Agentic AI 關鍵技術&#xff1a;MCP、A2A、Reasoning LLMs-MCP大模型上下文解析 我們首先來看一下 整個MCP的一個基本的一個流程&#xff0c;他解決的一個問題。我們回到這里&#xff0c;他解決的一個問題是什么呢&#xff1f;他解決這個問題就是你的大…

25.5.15

沒有比水題更令人開心的事情了 典型的并查集題目&#xff0c;并查集分為并和查&#xff0c;并就是把有關系的父親根結點設為同一個&#xff0c;查就是在成功構造后對其進行查詢 查通過遞歸實現 if (x f[x])return x; return f[x] find(f[x]); 由于并查集的特點&#xff0…

低損耗高效能100G O Band DWDM 10km光模塊 | 支持密集波分復用

目錄 前言 一、產品概述 100G QSFP28 O Band DWDM 10km光模塊核心特點包括&#xff1a; 二、為何選擇O Band DWDM方案&#xff1f; 1.低色散損耗&#xff0c;傳輸更穩定 2.兼容性強 三、典型應用場景 1.數據中心互聯&#xff08;DCI&#xff09; 2.企業園區/智慧城市組網 3.電信…

CentOS 7 內核升級指南:解決兼容性問題并提升性能

點擊上方“程序猿技術大咖”&#xff0c;關注并選擇“設為星標” 回復“加群”獲取入群討論資格&#xff01; CentOS 7 默認搭載的 3.10.x 版本內核雖然穩定&#xff0c;但隨著硬件和軟件技術的快速發展&#xff0c;可能面臨以下問題&#xff1a; 硬件兼容性不足&#xff1a;新…

計算機視覺----基礎概念、卷積

一、概述 1.計算機視覺的定義 計算機視覺(Computer Vision)是一個跨學科的研究領域,主要涉及如何使計算機能夠通過處理和理解數字圖像或視頻來自動進行有意義的分析和決策。其目標是使計算機能夠從視覺數據中獲取高層次的理解,類似于人類的視覺處理能力。 具體來說,計算機…

2025認證杯數學建模第二階段C題:化工廠生產流程的預測和控制,思路+模型+代碼

2025認證杯數學建模第二階段思路模型代碼&#xff0c;詳細內容見文末名片 一、探秘化工世界&#xff1a;問題背景大揭秘 在 2025 年 “認證杯”數學中國數學建模網絡挑戰賽第二階段 C 題中&#xff0c;我們一頭扎進了神秘又復雜的化工廠生產流程預測與控制領域。想象一下&…

關于AI人工智能的知識圖譜簡介

人工智能是計算機科學的一個重要領域&#xff0c;旨在理解和構建智能行為。人工智能可以被劃分為多個子領域或分支&#xff0c;包括機器學習、深度學習、自然語言處理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;、計算機視覺&#xff08;Computer Vis…

巧妙利用redis防爆破

爆破&#xff0c;也就是通過海量的嘗試&#xff0c;最終確定密碼&#xff0c;人們設置密碼具有習慣性&#xff0c;好記、簡單、有象征等&#xff0c;也就有密碼字典一說&#xff0c;但是該字典也是巨量的&#xff0c;但是相對于各種字母符號等組合就顯得輕量非常多 在Java Spr…