【问题标题】:WinDBG - !vad, what's the meaning of the column "Start" and "End"WinDBG - !vad,“开始”和“结束”列的含义是什么
【发布时间】:2018-04-17 15:19:35
【问题描述】:

我最近一直在使用 WinDBG,发现这个有用的 !vad 扩展。 我正在将虚拟地址转换为物理地址。

反正我没看懂“开始”和“结束”栏的意思,是什么意思?

如果有人能够向我解释,那就太棒了。我在其他网站上找不到任何关于此的内容,这可能太明显了......

这是一个输出示例:

kd> !vad 824bc2f8 VAD level start end commit 82741bf8 ( 1) 78000 78045 8 Mapped Exe EXECUTE_WRITECOPY 824ef368 ( 2) 7f6f0 7f7ef 0 Mapped EXECUTE_READ 824bc2f8 ( 0) 7ffb0 7ffd3 0 Mapped READONLY 8273e508 ( 2) 7ffde 7ffde 1 Private EXECUTE_READWRITE 82643fc8 ( 1) 7ffdf 7ffdf 1 Private EXECUTE_READWRITE

摘自:https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/-vad

【问题讨论】:

    标签: memory virtual windbg


    【解决方案1】:

    VAD = 虚拟地址描述符

    Vpn = 虚拟页码

    Page Size = 0x1000 通常(使用 GetSystemInformation() API)

    0x01st 页面从 0x00 开始,到 0x1000 结束 ( 1 * 0x1000 )

    0x10th 页面从 0x10 开始,到 0x10000 结束 (0x10 * 0x1000)
    依此类推,直到 32 位进程地址空间的最大值为 0xffffffff

    这里有解释

    寻找用户模式进程

    kd> !process 0 0 explorer.exe
    PROCESS 853bbd40  SessionId: 1  Cid: 0754    Peb: 7ffd5000  ParentCid: 072c
        DirBase: 17632000  ObjectTable: 8a0fda28  HandleCount: 687.
        Image: explorer.exe
    

    在上面的结果中设置进程上下文_EPROCESS地址

    kd> .process /p /r /P /i 853bbd40
    You need to continue execution (press 'g' <enter>) for the context
    to be switched. When the debugger breaks in again, you will be in
    the new process context.
    
    kd> g    
    
    Break instruction exception - code 80000003 (first chance)
    nt!RtlpBreakWithStatusInstruction:
    82897d00 cc              int     3
    

    检查 cr3 是否与 Directory Base 匹配,以便我们查看 适当上下文中的虚拟地址

    kd> r cr3
    cr3=17632000
    
    kd> !process @$proc 1
    PROCESS 853bbd40  SessionId: 1  Cid: 0754    Peb: 7ffd5000  ParentCid: 072c
        DirBase: 17632000  ObjectTable: 8a0fda28  HandleCount: 687.
        Image: explorer.exe
        VadRoot 8497e218 Vads 337 Clone 0 Private 2275. Modified 19. Locked 0.
    

    使用上述结果中的 Vadroot 检查 vad
    对于主模块名称,您可以注意到开始

    kd> .shell -ci "!vad  8497e218" grep -i explorer.exe
    85416348  2       c10       e90      4 Mapped  Exe  EXECUTE_WRITECOPY  \Windows\explorer.exe
    

    检查主模块的 peb 以查看它是否对应于 !vad->start * PageSize

    kd> .shell -ci "!peb " grep -i c10000.*explorer.exe
    
              c10000 4ce796f3 Nov 20 15:07:55 2010 C:\Windows\Explorer.EXE
    

    查看结束匹配对应的!vad->End * pageSize

    kd> lma 0xc10000 
    
    start    end        module name
    00c10000 00e91000   Explorer   (pdb symbols)          
    
    e:\symbols\explorer.pdb\57A762C063044F9C81BC4B8895FBF1AB2\explorer.pdb
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 2021-04-15
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      相关资源
      最近更新 更多