WinDBG - !vad,"Start" 和 "End" 列的含义是什么
WinDBG - !vad, what's the meaning of the column "Start" and "End"
我最近一直在使用 WinDBG,我发现这个有用的 !vad 扩展。
我正在将虚拟地址转换为物理地址。
反正我没看懂"Start"和"End"栏的意思,是什么意思?
如果有人能向我解释,那就太棒了。我在其他网站上找不到任何关于它的内容,它可能太明显了...
这是一个输出示例:
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
VAD = 虚拟地址描述符
Vpn = 虚拟页码
页面大小 = 0x1000 通常(使用 GetSystemInformation() API)
0x01st 页面从 0x00 开始到 0x1000 结束 ( 1 * 0x1000 )
0x10th 页面从 0x10 开始到 0x10000 结束 (0x10 * 0x1000)
依此类推,直到 32 位进程地址的最大值为 0xffffffff space
这里有解释
寻找用户态进程
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.pdbA762C063044F9C81BC4B8895FBF1AB2\explorer.pdb
我最近一直在使用 WinDBG,我发现这个有用的 !vad 扩展。 我正在将虚拟地址转换为物理地址。
反正我没看懂"Start"和"End"栏的意思,是什么意思?
如果有人能向我解释,那就太棒了。我在其他网站上找不到任何关于它的内容,它可能太明显了...
这是一个输出示例:
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
VAD = 虚拟地址描述符
Vpn = 虚拟页码
页面大小 = 0x1000 通常(使用 GetSystemInformation() API)
0x01st 页面从 0x00 开始到 0x1000 结束 ( 1 * 0x1000 )
0x10th 页面从 0x10 开始到 0x10000 结束 (0x10 * 0x1000)
依此类推,直到 32 位进程地址的最大值为 0xffffffff space
这里有解释
寻找用户态进程
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.pdbA762C063044F9C81BC4B8895FBF1AB2\explorer.pdb