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

nt!FsRtlFindLargeIndex函数分析计算在那个Mapping[(I)]数组中

nt!FsRtlFindLargeIndex函数分析计算在那个Mapping[(I)]数组中

1-3        第一个数组起止

5-8        第二个数组起止


第一部分:

1: kd> kc
 #
00 nt!FsRtlFindLargeIndex
01 nt!FsRtlLookupBaseMcbEntry
02 nt!FsRtlLookupLargeMcbEntry
03 Ntfs!NtfsLookupNtfsMcbEntry
04 Ntfs!NtfsLookupAllocation
05 Ntfs!NtfsPrepareBuffers
06 Ntfs!NtfsNonCachedIo
07 Ntfs!NtfsCommonRead
08 Ntfs!NtfsFsdRead
09 nt!IofCallDriver
0a nt!IopPageReadInternal
0b nt!IoPageRead
0c nt!MiDispatchFault
0d nt!MmAccessFault
0e nt!_KiTrap0E
0f nt!CcMapData
10 Ntfs!NtfsMapStream
11 Ntfs!NtfsReadMftRecord
12 Ntfs!NtfsMountVolume
13 Ntfs!NtfsCommonFileSystemControl
14 Ntfs!NtfsFspDispatch
15 nt!ExpWorkerThread
16 nt!PspSystemThreadStartup
17 nt!KiThreadStartup


1: kd> g
Breakpoint 22 hit
nt!FsRtlLookupBaseMcbEntry:
80a1cd96 55              push    ebp
1: kd> dv
                      Mcb = 0x895c5d14
                 LargeVbn = 0n0
                 LargeLbn = 0xf78d6330
         LargeSectorCount = 0xf78d6348
         LargeStartingLbn = 0x00000000
LargeCountFromStartingLbn = 0x00000000
                    Index = 0x00000000
               LocalIndex = 0x895c5d14


1: kd> dt _NONOPAQUE_BASE_MCB 0x895c5d14
nt!_NONOPAQUE_BASE_MCB
   +0x000 MaximumPairCount : 0xf
   +0x004 PairCount        : 1
   +0x008 PoolType         : 0 ( NonPagedPool )
   +0x00c Mapping          : 0x8950b140 _MAPPING
1: kd> dx -id 0,0,899a2278 -r1 ((ntkrnlmp!_MAPPING *)0x8950b140)
((ntkrnlmp!_MAPPING *)0x8950b140)                 : 0x8950b140 [Type: _MAPPING *]
    [+0x000] NextVbn          : 0x1 [Type: unsigned long]
    [+0x004] Lbn              : 0xc0000 [Type: unsigned long]


1: kd> g
Breakpoint 23 hit
nt!FsRtlFindLargeIndex:
80a1ba54 55              push    ebp
1: kd> dv
            Mcb = 0x895c5d14
            Vbn = 0
          Index = 0xf78d6030
       MinIndex = 0n8


第二部分:

#define StartingVbn(MCB,I) (                                \
    (VBN)((I) == 0 ? 0 : (((MCB)->Mapping))[(I)-1].NextVbn) \
)

#define EndingVbn(MCB,I) (                     \
    (VBN)((((MCB)->Mapping)[(I)].NextVbn) - 1) \
)

第三部分:

    MinIndex = 0;
    MaxIndex = BaseMcb->PairCount - 1;    =0


    while (MinIndex <= MaxIndex) {

        //
        //  Compute the middle index to look at
        //

        MidIndex = ((MaxIndex + MinIndex) / 2);        =0

        if (Vbn < StartingVbn(BaseMcb, MidIndex)) {

            //
            //  Vbn is less than the middle index so we need to drop
            //  the max down
            //

            MaxIndex = MidIndex - 1;

第四部分:

        } else if (Vbn > EndingVbn(BaseMcb, MidIndex)) {

            //
            //  Vbn is greater than the middle index so we need to bring
            //  up the min
            //

            MinIndex = MidIndex + 1;

((MCB)->Mapping)[(I)].NextVbn)    =edx=00000001


1: kd> dt _mapping 0x8950b140
nt!_MAPPING
   +0x000 NextVbn          : 1
   +0x004 Lbn              : 0xc0000
1: kd> p
nt!FsRtlFindLargeIndex+0x38:
80a1ba8c 8b14c2          mov     edx,dword ptr [edx+eax*8]
1: kd> pr
eax=00000000 ebx=00000000 ecx=00000000 edx=00000001 esi=895c5d14 edi=00000001
eip=80a1ba8f esp=f78d5ffc ebp=f78d600c 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!FsRtlFindLargeIndex+0x3b:
80a1ba8f 4a              dec     edx


第五部分:

        } else {

            *Index = MidIndex;        =0

            return TRUE;
        }

http://www.xdnf.cn/news/10189.html

相关文章:

  • 基于Java 实现 IM 业务回调
  • Java 之殇:从中流砥柱到“被温柔替代”
  • LeetCode Hot100(动态规划)
  • 04-redis-分布式锁-edisson
  • yum安装nginx后无法通过服务方式启动
  • 企业知识库问答系统避坑指南:检索优化与生成一致性解决方案
  • [ctfshow web入门] web80
  • 2.测试项目启动和研读需求文档
  • js 动画库、2048核心逻辑、面试题add[1][2][3]+4
  • Datatable和实体集合互转
  • 华锐视点助力,虚拟旅游绽放更璀璨光彩​
  • 图书管理系统的设计与实现
  • 北京大学肖臻老师《区块链技术与应用》公开课:06-BTC-网络
  • canoe 排查配置相关【graphics,capl】
  • Python基本运算符
  • python装饰器
  • DSP处理数字信号做什么用的?
  • Unsafe.putOrderedInt与Volatile
  • 驱动灯珠芯片LT3743手册理解
  • phpmyadmin
  • RTOS:启动调度器的作用(含源码逐行解读)
  • 微信小店推客系统达人用户管理的数据支持和便利
  • 【仿生机器人】Alice计划——仿生机器人需求
  • ABB HIEE300690R0001 AR C093 AE01 励磁调节器 PCB板特价
  • 第六十一节:深度学习-使用 OpenCV DNN 模块
  • 江科大SPI串行外设接口hal库实现
  • Linux 1.0.4
  • [硬件选型篇] 一文解决常用5V转3.3V电路选型困难(包括各选型的优缺点、纹波、效率等)
  • DAY 15 复习日
  • SpringBoot整合Flowable【08】- 前后端如何交互