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

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

相关文章:

  • 【Doris基础】Apache Doris中FE和BE的职责详解
  • 从0到1:多医院陪诊小程序开发笔记(上)
  • 使用java实现word转pdf,html以及rtf转word,pdf,html
  • [Python] 避免 PyPDF2 写入 PDF 出现黑框问题:基于语言自动匹配系统字体的解决方案
  • 并发解析hea,转为pdf格式
  • c++ 调用opencv或pcl流程
  • 互联网大厂Java求职面试:AI大模型推理服务性能优化与向量数据库分布式检索
  • 关于git的使用流程
  • ffmpeg baidu
  • 微信小程序(uniapp)对接腾讯云IM
  • 云服务器是什么,和服务器有什么区别?
  • redis-py 在 Python 中连接与使用 Redis
  • Linux之守护进程
  • sl4j+log4j日志框架
  • 硬件服务器基础
  • uniapp 实战demo
  • Spring Boot微服务架构(八):开发之初就引入APM工具监控
  • 端口映射不通的原因有哪些?路由器设置后公网访问本地内网失败分析
  • uniapp-商城-73-shop(6-商品列表,步进器添加数据到购物车,步进器数据同步(深度监听))
  • jenkins部署slave动态节点
  • 做网站app需要懂些什么软件/seo软件视频教程
  • 郑州大型网站/企业网站模板 免费
  • xsxz wordpress/seo好seo
  • 外贸网站建设 如何做/站长工具seo优化
  • 域名价格查询/长沙seo霜天
  • 专业做w7系统的网站/企业网站设计素材