Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
第一部分:
1: kd> g
Breakpoint 3 hit
nt!CcGetVacbMiss:
80a1a19e 6a30 push 30h
1: kd> kc
#
00 nt!CcGetVacbMiss
01 nt!CcGetVirtualAddress
02 nt!CcMapData
03 Ntfs!NtfsMapStream
04 Ntfs!NtfsReadBootSector Ntfs!NtfsReadBootSector
05 Ntfs!NtfsMountVolume
06 Ntfs!NtfsCommonFileSystemControl
07 Ntfs!NtfsFspDispatch
08 nt!ExpWorkerThread
09 nt!PspSystemThreadStartup
0a nt!KiThreadStartup
1: kd> kv
# ChildEBP RetAddr Args to Child
00 f78d6994 80a1a947 89901cc8 00000000 00000000 nt!CcGetVacbMiss (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\cache\vacbsup.c @ 492]
01 f78d69c0 80bf97f1 89901d98 00000000 00000000 nt!CcGetVirtualAddress+0xc7 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\cache\vacbsup.c @ 414]
02 f78d6a28 f7171729 899c41b0 f78d6a64 00000200 nt!CcMapData+0x89 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\cache\pinsup.c @ 191]
03 f78d6a54 f7196c08 895de328 898ffa10 00000000 Ntfs!NtfsMapStream+0xaf (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\fs\ntfs\cachesup.c @ 625]
04 f78d6ac0 f7191e0a 895de328 898fe7f8 f78d6c80 Ntfs!NtfsReadBootSector+0x15a (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\fs\ntfs\fsctrl.c @ 5143]
05 f78d6cec f717c5aa 895de328 89456310 895de328 Ntfs!NtfsMountVolume+0x226 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\fs\ntfs\fsctrl.c @ 1307]
06 f78d6d04 f71484b0 895de328 89456310 8999d020 Ntfs!NtfsCommonFileSystemControl+0x8c (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\fs\ntfs\fsctrl.c @ 837]
07 f78d6d80 80af2bb9 895de328 00000000 8999d020 Ntfs!NtfsFspDispatch+0x1fe (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\fs\ntfs\fspdisp.c @ 336]
08 f78d6dac 80d391f0 895de328 00000000 00000000 nt!ExpWorkerThread+0x10f (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ex\worker.c @ 1153]
09 f78d6ddc 80b00d52 80af2aaa 00000000 00000000 nt!PspSystemThreadStartup+0x2e (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ps\create.c @ 2213]
0a 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16 [d:\srv03rtm\base\ntos\ke\i386\threadbg.asm @ 81]
第二部分:
1: kd> dt SHARED_CACHE_MAP 89901cc8
nt!SHARED_CACHE_MAP
+0x000 NodeTypeCode : 0n767
+0x002 NodeByteSize : 0n304
+0x004 OpenCount : 1
+0x008 FileSize : _LARGE_INTEGER 0x2200
+0x010 BcbList : _LIST_ENTRY [ 0x89901cd8 - 0x89901cd8 ]
+0x018 SectionSize : _LARGE_INTEGER 0x100000
+0x020 ValidDataLength : _LARGE_INTEGER 0x7fffffff`ffffffff
+0x028 ValidDataGoal : _LARGE_INTEGER 0x7fffffff`ffffffff
+0x030 InitialVacbs : [4] (null)
+0x040 Vacbs : 0x89901cf8 -> (null) +0x040 Vacbs : 0x89901cf8
+0x044 FileObject : 0x899c41b0 _FILE_OBJECT
+0x048 ActiveVacb : (null)
+0x04c NeedToZero : (null)
+0x050 ActivePage : 0
+0x054 NeedToZeroPage : 0
+0x058 ActiveVacbSpinLock : 0
+0x05c VacbActiveCount : 0 +0x05c VacbActiveCount : 0
1: kd> dd 0x89901cf8
89901cf8 00000000 00000000 00000000 00000000
89901d08 89901cf8 899c41b0 00000000 00000000
89901d18 00000000 00000000 00000000 00000000
89901d28 00000000 80b1cbd0 80b1cbd0 00000204
PVACB
CcGetVacbMiss (
IN PSHARED_CACHE_MAP SharedCacheMap,
IN LARGE_INTEGER FileOffset,
IN OUT PKIRQL OldIrql
)
1: kd> dv
SharedCacheMap = 0x89901cc8
FileOffset = {0}
OldIrql = 0xf78d69bf ""
//
// Mark it in use so no one else will muck with it after
// we release the spin lock.
//
Vacb->Overlay.ActiveCount = 1;
SharedCacheMap->VacbActiveCount += 1;
第三部分:预先分析
Vacb = CONTAINING_RECORD( CcVacbFreeList.Flink, VACB, LruList );
CcMoveVacbToReuseTail( Vacb );
1: kd> x nt!CcVacbFreeList
80b1cb58 nt!CcVacbFreeList = struct _LIST_ENTRY [ 0x89988010 - 0x89993fc8 ]
1: kd> dx -r1 (*((ntkrnlmp!_LIST_ENTRY *)0x80b1cb58))
(*((ntkrnlmp!_LIST_ENTRY *)0x80b1cb58)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0x89988010 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x89993fc8 [Type: _LIST_ENTRY *]
1: kd> dt _vacb 0x89988010-10
nt!_VACB
+0x000 BaseAddress : (null)
+0x004 SharedCacheMap : (null)
+0x008 Overlay : __unnamed
+0x010 LruList : _LIST_ENTRY [ 0x89988028 - 0x80b1cb58 ]
#define CcMoveVacbToReuseTail(V) RemoveEntryList( &(V)->LruList ); \
InsertTailList( &CcVacbLru, &(V)->LruList );
1: kd> x nt!CcVacbLru
80b1cb60 nt!CcVacbLru = struct _LIST_ENTRY [ 0x80b1cb60 - 0x80b1cb60 ]
1: kd> dx -r1 (*((ntkrnlmp!_LIST_ENTRY *)0x80b1cb60))
(*((ntkrnlmp!_LIST_ENTRY *)0x80b1cb60)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0x80b1cb60 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x80b1cb60 [Type: _LIST_ENTRY *]
第四部分:调试过程
Vacb = CONTAINING_RECORD( CcVacbFreeList.Flink, VACB, LruList ); //之后
dv
Vacb = 0x89988000
1: kd> dx -r1 ((ntkrnlmp!_VACB *)0x89988000)
((ntkrnlmp!_VACB *)0x89988000) : 0x89988000 [Type: _VACB *]
[+0x000] BaseAddress : 0x0 [Type: void *]
[+0x004] SharedCacheMap : 0x0 [Type: _SHARED_CACHE_MAP *]
[+0x008] Overlay [Type: __unnamed]
[+0x010] LruList [Type: _LIST_ENTRY]
1: kd> dx -r1 (*((ntkrnlmp!_LIST_ENTRY *)0x89988010))
(*((ntkrnlmp!_LIST_ENTRY *)0x89988010)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0x89988028 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x80b1cb58 [Type: _LIST_ENTRY *]
CcMoveVacbToReuseTail( Vacb ); //之后
1: kd> dx -r1 ((ntkrnlmp!_VACB *)0x89988000)
((ntkrnlmp!_VACB *)0x89988000) : 0x89988000 [Type: _VACB *]
[+0x000] BaseAddress : 0x0 [Type: void *]
[+0x004] SharedCacheMap : 0x0 [Type: _SHARED_CACHE_MAP *]
[+0x008] Overlay [Type: __unnamed]
[+0x010] LruList [Type: _LIST_ENTRY]
1: kd> dx -r1 (*((ntkrnlmp!_LIST_ENTRY *)0x89988010))
(*((ntkrnlmp!_LIST_ENTRY *)0x89988010)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0x80b1cb60 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x80b1cb60 [Type: _LIST_ENTRY *]
1: kd> x nt!CcVacbLru
80b1cb60 nt!CcVacbLru = struct _LIST_ENTRY [ 0x89988010 - 0x89988010 ]
1: kd> dx -r1 (*((ntkrnlmp!_LIST_ENTRY *)0x80b1cb60))
(*((ntkrnlmp!_LIST_ENTRY *)0x80b1cb60)) [Type: _LIST_ENTRY]
[+0x000] Flink : 0x89988010 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x89988010 [Type: _LIST_ENTRY *]
相关文章:
Ntfs!NtfsReadBootSector函数分析之nt!CcGetVacbMiss中得到一个nt!_VACB结构
第一部分: 1: kd> g Breakpoint 3 hit nt!CcGetVacbMiss: 80a1a19e 6a30 push 30h 1: kd> kc # 00 nt!CcGetVacbMiss 01 nt!CcGetVirtualAddress 02 nt!CcMapData 03 Ntfs!NtfsMapStream 04 Ntfs!NtfsReadBootSector Ntfs…...

猿大师办公助手WebOffice用二进制数据流在Web前端打开Office文档
猿大师办公助手作为第三代WebOffice方案,猿大师办公助手把本地原生Office无缝嵌入网页环境中实现在线编辑Office功能,提供了完全与本机Office一致(排版、打印等)的操作体验,保留100%原生功能(VBA宏、复杂公…...

etcd:高可用,分布式的key-value存储系统
引言 etcd是基于go语言开发的一款kv存储引擎,基于raft一致性算法实现的一种存储 一.etcd的底层原理 1.etcd的特点 高可用性与一致性:etcd 使用 Raft 算法保证集群中数据的强一致性,即使在节点故障的情况下也能保持数据完整性。 分布式存储&a…...

AI in Game,大模型能力与实时音视频技术融合,交出AI应用新答卷
随着AI的技术进步和工具普及,尤其是在这两年的跃进之后,AI在游戏行业内的应用已经逐步由理念设想推向落地实践。从蔡浩宇披露的AI新游《Whispers From The Star》到GDC上各大厂家呈现的游戏AI新亮点,我们看到了更多AI与游戏的结合方式&#x…...

欢乐熊大话蓝牙知识11:如何打造一个低功耗蓝牙温湿度传感器?
🧊 如何打造一个低功耗蓝牙温湿度传感器? 用电像抠门老头,通信像特工密谈。 🌡️ 引子:为什么你需要一个低功耗 BLE 传感器? 你是不是有过这种需求: 想在办公室角落放个传感器看温湿度,却不想拉电源线?想给智能养宠箱加个环境感知模块,但不能三天一换电池?想造个…...

Linux 安装 Remmina
欢迎关注公号:每日早参,第一时间获取AI资讯! 为什么安装Remmina, 因为Mobaxterm免费版本有窗口限制。 Remmina 是一款功能强大的开源远程桌面客户端,适用于 Linux 和其他类 Unix 系统,也支持 Windows 平台。 安装指南…...

什么是HTTP HTTP 和 HTTPS 的区别
HTTP协议定义 超文本传输协议(HyperText Transfer Protocol, HTTP)是一种应用层协议,主要用于客户端与服务器之间的数据交换。它基于请求-响应模型运行,在每次会话中由客户端发起请求,服务器返回相应的内容。 HTTP 是…...
cos和dmz学习
COS(Capability Open Service) 组件主要为系统提供能力开放的入口和控制。系统中需要对外进行能力开放的组件将RESTful的API接口注册到COS组件中,第三方系统就可以通过调用API来获取组件提供的能力。应用场景:当你想调用的外部系统接口不支持外网访问时&…...
上升沿计数 stm32 中断
在STM32上利用中断实现上升沿计数,可以按照以下步骤进行,这里以STM32F1系列为例,使用HAL库进行代码编写: 1. STM32CubeMX配置 打开STM32CubeMX并创建一个新工程,选择对应的STM32微控制器型号(如STM32F103C8T6)。在Pinout & Configuration选项卡中,找到用于检测上升…...
Java 各版本核心新特性的详细说明
一、Java 8(2014)—— 函数式编程的里程碑 1. Lambda 表达式 作用:简化匿名内部类,支持函数式编程。示例:// 传统匿名内部类 Runnable r1 new Runnable() {Overridepublic void run() {System.out.println("He…...
Nginx 性能优化全解析:从进程到安全的深度实践
一、进程优化:释放硬件性能潜力 Nginx 通过多工作进程处理请求,合理配置进程参数能充分利用 CPU 资源,避免资源浪费。 1.1 worker_processes 参数详解 worker_processes用于设置 Nginx 工作进程的数量,它直接影响 Nginx 对 CP…...

Pycharm and Flask 的学习心得(10)重定向
一 定义: 服务器告诉浏览器:你现在访问的这个页面,请改去另一个地址访问。 浏览器接收到这个“指令”后,会 自动跳转到另一个网页。 二 如何写: 方法一:重定向到网址 方法二:重定向到自己的…...

单机Kafka配置ssl并在springboot使用
目录 SSL证书生成根证书生成服务端和客户端证书生成keystore.jks和truststore.jks辅助脚本单独生成truststore.jks 环境配置hosts文件kafka server.properties配置ssl 启动kafkakafka基础操作springboot集成准备工作需要配置的文件开始消费 SSL证书 证书主要包含两大类&#x…...
《棒球特长生》棒球升学途径·棒球1号位
美国大学棒球体系 | U.S. College Baseball System 美国大学棒球主要通过 NCAA(全国大学体育协会)和 NAIA(全美校际体育协会)组织,分为三个级别: NCAA Division I:竞技水平最高,提…...
JavaScript的call和apply
在 JavaScript 中,.call() 和 .apply() 都是 Function 原型上的方法,用于改变函数执行时的上下文对象(即 this 指向),它们的区别仅在于参数传递的形式不同。下面结合几个常见场景,说明它们的实际应用。 1. …...
DiT、 U-Net 与自回归模型的优势
DiT 相对于 U-Net 的优势 全局自注意力 vs. 局部卷积 U-Net 依赖卷积和池化/上采样来逐层扩大感受野,捕捉全局信息需要堆叠很多层或借助跳跃连接(skip connections)。DiT 在每个分辨率阶段都用 Transformer 模块(多头自注意力 ML…...
开源 FcDesigner 表单设计器组件事件详解
FcDesigner 是一款基于Vue的开源低代码可视化表单设计器工具,通过数据驱动表单渲染。可以通过拖拽的方式快速创建表单,提高开发者对表单的开发效率,节省开发者的时间。并广泛应用于在政务系统、OA系统、ERP系统、电商系统、流程管理等领域。 …...
Teigha应用——解析CAD文件(DWG格式)Teigha在CAD C#二次开发中的基本应用
Teigha是一款专为开发者设计的工具,其核心技术在于强大的API和丰富的功能集,提供了一系列工具和方法,使开发者能够轻松地读取、解析和操作DWG文件。它支持多种操作系统,能在处理大型DWG文件时保持高效性能,还可用于构建…...

C++23内存分配新特性:std::allocate_at_least
文章目录 一、背景与动机二、std::allocator::allocate_at_least的特性三、std::allocate_at_least的自由函数版本四、实际应用场景1. 动态容器的优化2. 自定义分配器 五、总结 在C23标准中, std::allocate_at_least和 std::allocator::allocate_at_least的引入为…...
JavaScript性能优化全景指南
JavaScript性能优化全景指南 Ⅰ. 加载性能优化 1.1 代码分割与懒加载 动态导入(ES2020) javascript // 路由级代码分割 const ProductPage () > import(/* webpackChunkName: "product" */ ./ProductPage.vue); // 交互驱动加载 document.querySelector(#char…...

04-jenkins学习之旅-java后端项目部署实践
1、创建被管理项目 2、构建流程说明 jenkins其实就是将服务部署拆分成了: 1、拉取代码(git) 2、打包编译 3、自定义脚本(jar复制、执行启动脚本) 4、部署成功后的一些通知等 3、demo配置 3.1、General 3.2 源码管理 添加用户名密码方式如下图 3.2.1 常见错误(r…...

基于Python flask 的豆瓣电影top250数据评分可视化
文章目录 基于Python flask 的豆瓣电影top250数据评分可视化项目简介项目结构效果展示源码获取 基于Python flask 的豆瓣电影top250数据评分可视化 博主介绍:✌安替-AnTi:CSDN博客专家、掘金/华为云//InfoQ等平台优质作者,硕士研究生毕业。专…...

Cat.4+WiFi6工业路由器介绍小体积大作用ER4200
ER42004G Cat.4WiFi6 工业路由器隶属于纵横智控ER系列,型号为ER4200,是一款坚固耐用、性能强大的网络设备,专为应对严苛环境而设计。它采用工业级品质设计,集成 4G Cat.4 全网络支持和 WiFi6 技术,可在稳定性和性能至关…...
大模型应用开发第三讲:大模型是Agent的“大脑”,提供通用推理能力(如GPT-4、Claude 3)
大模型应用开发第三讲:大模型是Agent的“大脑”,提供通用推理能力(如GPT-4、Claude 3) 资料取自《大模型应用开发:动手做AI Agent 》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的…...

创建型模式之Abstract Factory(抽象工厂)
创建型模式之Abstract Factory(抽象工厂) 摘要: 本文介绍了抽象工厂模式(Abstract Factory),它是一种创建型设计模式,提供了一种创建一系列相关对象的接口而无需指定具体类。文章通过手机工厂示…...
GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【一】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...

【DeepSeek论文精读】12. DeepSeek-Prover-V2: 通过强化学习实现子目标分解的形式化数学推理
欢迎关注[【AIGC论文精读】](https://blog.csdn.net/youcans/category_12321605.html)原创作品 【DeepSeek论文精读】1. 从 DeepSeek LLM 到 DeepSeek R1 【DeepSeek论文精读】10. DeepSeek-Coder-V2: 突破闭源模型在代码智能领域的障碍 【DeepSeek论文精读】12. De…...
字符串day7
344 反转字符串 字符串理论上也是一个数组,因此只需要用双指针即可 class Solution { public:void reverseString(vector<char>& s) {for(int i0,js.size()-1;i<j;i,j--){swap(s[i],s[j]);}} };541 反转字符串 自己实现一个反转从start到end的字符串…...

vue2中,codemirror编辑器的使用
交互说明 在编辑器中输入{时,会自动弹出选项弹窗,然后可以选值插入。 代码 父组件 <variable-editorv-model"content":variables"variables"placeholder"请输入模板内容..."blur"handleBlur" />data…...

FastAPI与MongoDB分片集群:异步数据路由与聚合优化
title: FastAPI与MongoDB分片集群:异步数据路由与聚合优化 date: 2025/05/26 16:04:31 updated: 2025/05/26 16:04:31 author: cmdragon excerpt: FastAPI与MongoDB分片集群集成实战探讨了分片集群的核心概念、Motor驱动配置技巧、分片数据路由策略、聚合管道高级应用、分片…...