nt!CcGetVacbMiss函數分析之設置好nt!_VACB然后調用函數nt!SetVacb

第一部分:MmMapViewInSystemCache函數返回

??????? Status = MmMapViewInSystemCache (SharedCacheMap->Section,
???????????????????????????????????????? &Vacb->BaseAddress,
???????????????????????????????????????? &NormalOffset,
???????????????????????????????????????? &MappedLength.LowPart);


NTSTATUS
MmMapViewInSystemCache (
??? IN PVOID SectionToMap,
??? OUT PVOID *CapturedBase,
??? IN OUT PLARGE_INTEGER SectionOffset,
??? IN OUT PULONG CapturedViewSize
??? )

第二部分:(ntkrnlmp!_VACB *)0x89988000結構中的BaseAddress????? : 0xc1080000

1: kd> p
nt!MmMapViewInSystemCache+0x51e:
80aaf210 c21000????????? ret???? 10h
1: kd> p
nt!CcGetVacbMiss+0x300:
80a1a49e 8945d4????????? mov???? dword ptr [ebp-2Ch],eax
1: kd> dv
?? SharedCacheMap = 0x89901cc8
?????? FileOffset = {0}
????????? OldIrql = 0xf78d69bf ""
????? PageIsDirty = 0x89901cc8
OldSharedCacheMap = 0xffffffff
???? NormalOffset = {0}
?????? ActiveVacb = 0x00000000
???????????? Vacb = 0x89988000
?????????? Status = 0n-141727208
?????? ActivePage = 0x30
???? MappedLength = {262144}
1: kd> dx -r1 ((ntkrnlmp!_VACB *)0x89988000)
((ntkrnlmp!_VACB *)0x89988000)???????????????? : 0x89988000 [Type: _VACB *]
??? [+0x000] BaseAddress????? : 0xc1080000 [Type: void *]?? ??? ??? ??? ??? ?BaseAddress????? : 0xc1080000
??? [+0x004] SharedCacheMap?? : 0x0 [Type: _SHARED_CACHE_MAP *]
??? [+0x008] Overlay????????? [Type: __unnamed]
??? [+0x010] LruList????????? [Type: _LIST_ENTRY]

第三部分:

??? //
??? //? Finish filling in the Vacb, and store its address in the array in
??? //? the Shared Cache Map.? (We have to rewrite the ActiveCount
??? //? since it is overlaid.)? To do this we must reacquire the
??? //? spin lock one more time.? Note we have to check for the unusual
??? //? case that someone beat us to mapping this view, since we had to
??? //? drop the spin lock.
??? //

??? if ((TempVacb = GetVacb( SharedCacheMap, NormalOffset )) == NULL) {

??????? Vacb->SharedCacheMap = SharedCacheMap;
??????? Vacb->Overlay.FileOffset = NormalOffset;
??????? Vacb->Overlay.ActiveCount = 1;

??????? SetVacb( SharedCacheMap, NormalOffset, Vacb );

#define GetVacb(SCM,OFF) (??????????????????????????????????????????????????????????????? \
??? ((SCM)->SectionSize.QuadPart > VACB_SIZE_OF_FIRST_LEVEL) ???????????????????????????? \
??? CcGetVacbLargeOffset((SCM),(OFF).QuadPart) :????????????????????????????????????????? \
??? (SCM)->Vacbs[(OFF).LowPart >> VACB_OFFSET_SHIFT]????????????????????????????????????? \
)

dv

???? NormalOffset = {0}

1: kd> p
nt!CcGetVacbMiss+0x4cb:
80a1a669 8b1c81????????? mov???? ebx,dword ptr [ecx+eax*4]
1: kd> r
eax=00000000 ebx=00000000 ecx=89901cf8


第四部分: ((TempVacb = GetVacb( SharedCacheMap, NormalOffset )) == NULL)


1: kd> dd 89901cf8
89901cf8? 00000000 00000000 00000000 00000000
89901d08? 89901cf8 899c41b0 00000000 00000000
89901d18? 00000000 00000000 00000000 00000001
89901d28? 00000000 80b1cbd0 80b1cbd0 00000204
89901d38? 00000000 00000000 e127a740 00000000
89901d48? 00000000 00000000 00000000 00000000
89901d58? f7169a2c 898ffa10 89901dec 89901dec
89901d68? 00000000 f718f6ec 00000000 00000000

1: kd> p
nt!CcGetVacbMiss+0x4ce:
80a1a66c 85db??????????? test??? ebx,ebx
1: kd> r
eax=00000000 ebx=00000000 ecx=89901cf8 edx=00000000 esi=89988000 edi=89901cc8
eip=80a1a66c esp=f78d6948 ebp=f78d6994 iopl=0???????? nv up ei pl zr na pe nc
cs=0008? ss=0010? ds=0023? es=0023? fs=0030? gs=0000???????????? efl=00000246
nt!CcGetVacbMiss+0x4ce:
80a1a66c 85db??????????? test??? ebx,ebx
1: kd> p
nt!CcGetVacbMiss+0x4d0:
80a1a66e 7527??????????? jne???? nt!CcGetVacbMiss+0x4f9 (80a1a697)

89901cf8還沒有被設置現在設置Vacb!!!


第五部分:

??? if ((TempVacb = GetVacb( SharedCacheMap, NormalOffset )) == NULL) {

??????? Vacb->SharedCacheMap = SharedCacheMap;
??????? Vacb->Overlay.FileOffset = NormalOffset;
??????? Vacb->Overlay.ActiveCount = 1;

??????? SetVacb( SharedCacheMap, NormalOffset, Vacb );


1: kd> dx -r1 ((ntkrnlmp!_VACB *)0x89988000)
((ntkrnlmp!_VACB *)0x89988000)???????????????? : 0x89988000 [Type: _VACB *]
??? [+0x000] BaseAddress????? : 0xc1080000 [Type: void *]
??? [+0x004] SharedCacheMap?? : 0x89901cc8 [Type: _SHARED_CACHE_MAP *]
??? [+0x008] Overlay????????? [Type: __unnamed]
??? [+0x010] LruList????????? [Type: _LIST_ENTRY]


?? +0x008 Overlay????????? : __unnamed
????? +0x000 FileOffset?????? : _LARGE_INTEGER
???????? +0x000 LowPart????????? : Uint4B
???????? +0x004 HighPart???????? : Int4B
???????? +0x000 u??????????????? : __unnamed
???????? +0x000 QuadPart???????? : Int8B
????? +0x000 ActiveCount????? : Uint2B


1: kd> dd 0x89988000
89988000? c1080000 89901cc8 00000001 00000000
89988010? 80b1cb60 80b1cb60


第六部分:

1: kd> t
Breakpoint 2 hit
nt!SetVacb:
80a194a2 55????????????? push??? ebp
1: kd> kc
?#
00 nt!SetVacb
01 nt!CcGetVacbMiss
02 nt!CcGetVirtualAddress
03 nt!CcMapData
04 Ntfs!NtfsMapStream
05 Ntfs!NtfsReadBootSector
06 Ntfs!NtfsMountVolume
07 Ntfs!NtfsCommonFileSystemControl
08 Ntfs!NtfsFspDispatch
09 nt!ExpWorkerThread
0a nt!PspSystemThreadStartup
0b nt!KiThreadStartup
1: kd> dv
?SharedCacheMap = 0x89901cc8
???????? Offset = {0}
?????????? Vacb = 0x89988000

??? } else if (Vacb < VACB_SPECIAL_FIRST_VALID) {
??????? SharedCacheMap->Vacbs[Offset.LowPart >> VACB_OFFSET_SHIFT] = Vacb;
??? }

#define VACB_OFFSET_SHIFT??????????????? (18)


第七部分:結果!!!

1: kd> dd 0x89901cf8
89901cf8? 89988000
1: kd> dt nt!_vacb 89988000
?? +0x000 BaseAddress????? : 0xc1080000 Void
?? +0x004 SharedCacheMap?? : 0x89901cc8 _SHARED_CACHE_MAP
?? +0x008 Overlay????????? : __unnamed
?? +0x010 LruList????????? : _LIST_ENTRY [ 0x80b1cb60 - 0x80b1cb60 ]

原來為0
1: kd> dd 89901cf8
89901cf8? 00000000 00000000 00000000 00000000

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

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

相關文章

Uniapp+UView+Uni-star打包小程序極簡方案

一、減少主包體積 主包污染源&#xff08;全局文件依賴&#xff09;勁量獨立導入 componentsstaticmain.jsApp.vueuni.css 分包配置缺陷&#xff0c;未配置manifest.json中mp-weixin節點 "usingComponents" : true,"lazyCodeLoading" : "requiredC…

Teigha應用——解析CAD文件(DWG格式)Teigha在CAD C#二次開發中的基本應用

Teigha是一款專為開發者設計的工具&#xff0c;其核心技術在于強大的API和豐富的功能集&#xff0c;提供了一系列工具和方法&#xff0c;使開發者能夠輕松地讀取、解析和操作DWG文件。它支持多種操作系統&#xff0c;能在處理大型DWG文件時保持高效性能&#xff0c;還可用于構建…

JavaWeb:SpringBoot Bean管理

獲取Bean Bean作用域 解決循環依賴方式 1.粗暴刪除依賴 2.打破依賴配置 3.使用lazy注解 引入第三方Bean

Lua 腳本在 Redis 中的運用-23(Lua 腳本語法教程)

在 Redis 中編寫和執行 Lua 腳本 Lua 腳本是在 Redis 中執行自定義邏輯的強大功能&#xff0c;可以直接在 Redis 服務器上執行。這減少了延遲&#xff0c;提高了性能&#xff0c;并能夠實現客戶端腳本難以或不可能實現的原子操作。通過在 Redis 中嵌入 Lua 腳本&#xff0c;您…

從零實現本地語音識別(FunASR)

FunASR 是達摩院開源的綜合性語音處理工具包&#xff0c;提供語音識別&#xff08;ASR&#xff09;、語音活動檢測&#xff08;VAD&#xff09;、標點恢復&#xff08;PUNC&#xff09;等全流程功能&#xff0c;支持多種主流模型&#xff08;如 Paraformer、Whisper、SenseVoic…

deepseek開源資料匯總

參考&#xff1a;DeepSeek“開源周”收官&#xff0c;連續五天到底都發布了什么? 目錄 一、首日開源-FlashMLA 二、Day2 DeepEP 三、Day3 DeepGEMM 四、Day4 DualPipe & EPLB 五、Day5 3FS & Smallpond 總結 一、首日開源-FlashMLA 多頭部潛在注意力機制&#x…

【C++ Qt】認識Qt、Qt 項目搭建流程(圖文并茂、通俗易懂)

每日激勵&#xff1a;“不設限和自我肯定的心態&#xff1a;I can do all things。 — Stephen Curry” 緒論?&#xff1a; 本章將開啟Qt的學習&#xff0c;Qt是一個較為古老但仍然在GUI圖形化界面設計中有著舉足輕重的地位&#xff0c;因為它適合嵌入式和多種平臺而被廣泛使用…

AI應用 Markdown 渲染對比與原生實現方案

DeepSeek、豆包、騰訊元寶、ChatGPT 渲染實現對比表 產品解析方式渲染引擎/庫UI 組件架構Markdown支持范圍流程圖/導圖支持擴展架構及裁剪流式解析渲染DeepSeek原生解析&#xff08;非WebView&#xff09;采用 CommonMark 標準解析器&#xff08;推測使用 Markwon 庫&#xff…

Ubuntu20.04系統安裝,使用系統盤安裝

1、系統安裝 Ubuntu20.04系統安裝&#xff0c;使用系統盤安裝 查看ubuntu系統版本 lsb_release -a&#xff1a;顯示發行版名稱、版本號及代號 (base) rootai-System-Product-Name:/media/ai/wh/clash-for-linux-master# lsb_release -a No LSB modules are available. Distri…

(自用)Java學習-5.19(地址管理,三級聯動,預支付)

1. 地址管理模塊 地址展示 前端&#xff1a;通過 showAddress() 發起 Ajax GET 請求&#xff0c;動態渲染地址列表表格&#xff0c;使用 #{tag}、#{name} 等占位符替換真實數據。 后端&#xff1a; 控制器層調用 AddressService&#xff0c;通過 AddressMapper 查詢用戶地址數…

Spring 循環依賴:從原理到解決方案的全面解析

Spring 循環依賴&#xff1a;從原理到解決方案的全面解析 一、循環依賴的定義與分類 1. 什么是循環依賴&#xff1f; 在 Spring 框架中&#xff0c;循環依賴指的是多個 Bean 之間形成了依賴閉環。例如&#xff1a; Bean A 依賴 Bean BBean B 依賴 Bean CBean C 又依賴 Bean…

n 階矩陣 A 可逆的充分必要條件是 ∣ A ∣ ≠ 0

n 階矩陣 A 可逆的充分必要條件是 ∣ A ∣ ≠ 0 |A| \neq 0 ∣A∣0 的幾何意義 1. 行列式的幾何意義回顧 行列式 ∣ A ∣ |A| ∣A∣&#xff08;或 det ? ( A ) \det(A) det(A)&#xff09;表示矩陣 A A A 所對應的線性變換對空間的體積縮放因子&#xff1a; ∣ A ∣ &…

Rockey Linux 安裝ffmpeg

1.環境準備 Rockey linux 9.2 ffmpeg 靜態資源包 這個是我自己的&#xff1a; https://download.csdn.net/download/liudongyang123/90920340https://download.csdn.net/download/liudongyang123/90920340 這個是官網的 Releases BtbN/FFmpeg-Builds GitHub 以上兩個資…

wordcount在集群上的測試

1.將louts.txt文件從cg計算機復制到master節點上面&#xff0c;存放在/usr/local/hadoop 需要輸入密碼&#xff1a;83953588abc scp /root/IdeaProjects/mapReduceTest/lotus.txt root172.18.0.2:/usr/local/hadoop /WordCountTest/input 2.將lotus.txt文件從master這臺機器…

AI+制造:中小企業的低成本智能化轉型

文章內容過長&#xff0c;可以考慮直接跳轉到文章末尾查看概要圖 在制造業競爭日益激烈的今天&#xff0c;中小企業正面臨著前所未有的挑戰&#xff1a;人力成本持續攀升、能源消耗居高不下、質量控制難度增加。與此同時&#xff0c;數字化轉型已成為行業共識&#xff0c;但高…

Linux C/C++編程 —— 線程技術總結

一、線程基本概念 線程是進程內的一個執行單元&#xff0c;多個線程共享進程的資源&#xff08;如內存、文件描述符等&#xff09;&#xff0c;但每個線程擁有自己的寄存器、棧等。與進程相比&#xff0c;線程的創建、切換開銷較小&#xff0c;能更高效地利用 CPU 資源。 二、…

Femap許可證與網絡安全策略

隨著科技的快速發展&#xff0c;網絡安全問題已成為各行各業關注的焦點。在電磁仿真領域&#xff0c;Femap作為一款領先的軟件&#xff0c;其許可證的安全性和網絡策略的重要性不言而喻。本文將探討Femap許可證與網絡安全策略的關系&#xff0c;確保您的電磁仿真工作能夠在一個…

深度解析:SQLynx 如何筑牢數據庫安全防線?

在數據驅動業務發展的時代&#xff0c;數據庫作為企業核心資產的 “保險箱”&#xff0c;其安全性至關重要。一旦數據庫遭遇攻擊、數據泄露或被誤操作&#xff0c;將給企業帶來不可估量的損失。而 SQLynx 作為一款專注于數據庫安全管理的工具&#xff0c;憑借其多項創新技術與功…

更新時間相差8個小時

下面的java代碼在updateFill方法里面生成的modifiedTime時間是當前時間是正確的&#xff0c;為什么到service層testCommonFieldAutoUpdate方法里面去更新的時候modifiedTime就差8個小時呢&#xff1f;代碼如下所示&#xff1a; Slf4j Component public class MpMetaObjectHand…

Windows逆向工程提升之IMAGE_TLS_DIRECTORY

公開視頻 -> 鏈接點擊跳轉公開課程博客首頁 -> ???鏈接點擊跳轉博客主頁 目錄 TLS的作用 TLS的實現 靜態 TLS?? 動態 TLS?? 內部實現 回調機制 TLS Directory 的結構 TLS的作用 TLS (Thread Local Storage) 是一種用于為多線程應用程序提供線程獨立存儲空…