糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > VAD 虚拟内存

VAD 虚拟内存

时间:2019-01-12 18:04:12

相关推荐

VAD 虚拟内存

Windows中的虚拟地址分配

使用指令dt _EPROCESS 874ed030 观察EPROCESS结构体偏移为0x278的地方,这个地方就是系统拿来存放每个进程的虚拟地址空间的分配情况

输入!vad 874ed030+278 查看该平衡二叉树

Level是二叉树的层数 start是该块虚拟地址空间的起始地址 end为结束地址 commit为请求次数

写一段程序测试下

#include<stdio.h>#include<Windows.h>int main() {system("pause");PVOID base = VirtualAlloc(NULL, 0x1000, MEM_RESERVE, PAGE_NOACCESS);printf("base:%p\r\n", base);system("pause");base = VirtualAlloc(base, 0x1000, MEM_COMMIT, PAGE_READWRITE);printf("base:%p\r\n", base);system("pause");return 0; }

首先找到程序VAD一开始的状态

申请一块内存之后

再重新修改属性 可以发现commit变为1,但是属性还是没改

打开CE 看内存 发现还是修改了的

VAD里面的结构为MMVAD

私有内存一般是MMVAD_SHORT

映射内存一般是MMVAD_LONG

kd> dt _MMVADnt!_MMVAD+0x000 u1: <unnamed-tag>+0x004 LeftChild : Ptr32 _MMVAD+0x008 RightChild : Ptr32 _MMVAD+0x00c StartingVpn: Uint4B+0x010 EndingVpn : Uint4B+0x014 u: <unnamed-tag>+0x018 PushLock : _EX_PUSH_LOCK+0x01c u5: <unnamed-tag>+0x020 u2: <unnamed-tag>+0x024 Subsection : Ptr32 _SUBSECTION+0x024 MappedSubsection : Ptr32 _MSUBSECTION+0x028 FirstPrototypePte : Ptr32 _MMPTE+0x02c LastContiguousPte : Ptr32 _MMPTE+0x030 ViewLinks : _LIST_ENTRY+0x038 VadsProcess: Ptr32 _EPROCESSkd> dt _MMVAD_SHORTnt!_MMVAD_SHORT+0x000 u1: <unnamed-tag>+0x004 LeftChild : Ptr32 _MMVAD+0x008 RightChild : Ptr32 _MMVAD+0x00c StartingVpn: Uint4B+0x010 EndingVpn : Uint4B+0x014 u: <unnamed-tag>+0x018 PushLock : _EX_PUSH_LOCK+0x01c u5: <unnamed-tag>kd> dt _MMVAD_LONGnt!_MMVAD_LONG+0x000 u1: <unnamed-tag>+0x004 LeftChild : Ptr32 _MMVAD+0x008 RightChild : Ptr32 _MMVAD+0x00c StartingVpn: Uint4B+0x010 EndingVpn : Uint4B+0x014 u: <unnamed-tag>+0x018 PushLock : _EX_PUSH_LOCK+0x01c u5: <unnamed-tag>+0x020 u2: <unnamed-tag>+0x024 Subsection : Ptr32 _SUBSECTION+0x028 FirstPrototypePte : Ptr32 _MMPTE+0x02c LastContiguousPte : Ptr32 _MMPTE+0x030 ViewLinks : _LIST_ENTRY+0x038 VadsProcess: Ptr32 _EPROCESS+0x03c u3: <unnamed-tag>+0x044 u4: <unnamed-tag>

kd> dt _MMVAD_SHORT 876f4f50 -r1nt!_MMVAD_SHORT+0x000 u1: <unnamed-tag>+0x000 Balance: 0y00+0x000 Parent : 0x8757afc0 _MMVAD //有无父节点+0x004 LeftChild : (null) +0x008 RightChild : (null) //有无左子树与右子树+0x00c StartingVpn: 0xd0+0x010 EndingVpn : 0xd0//起始页与结束页+0x014 u: <unnamed-tag>//锁页+0x000 LongFlags : 0x98000001+0x000 VadFlags : _MMVAD_FLAGS+0x018 PushLock : _EX_PUSH_LOCK+0x000 Locked : 0y0+0x000 Waiting: 0y0+0x000 Waking : 0y0+0x000 MultipleShared : 0y0+0x000 Shared : 0y0000000000000000000000000000 (0)+0x000 Value : 0+0x000 Ptr : (null) +0x01c u5: <unnamed-tag>+0x000 LongFlags3 : 0+0x000 VadFlags3 : _MMVAD_FLAGS3kd> dt _MMVAD_FLAGS 876f4f50+14nt!_MMVAD_FLAGS+0x000 CommitCharge: 0y0000000000000000001 (0x1)+0x000 NoChange : 0y0//如果为1则不可改属性+0x000 VadType: 0y000//类型+0x000 MemCommit : 0y0+0x000 Protection : 0y11000 (0x18)//保护+0x000 Spare : 0y00+0x000 PrivateMemory : 0y1

修改保护模式

kd> ed 876f4f50+14 86000001kd> dt _MMVAD_FLAGS 876f4f50+14nt!_MMVAD_FLAGS+0x000 CommitCharge: 0y0000000000000000001 (0x1)+0x000 NoChange : 0y0+0x000 VadType: 0y000+0x000 MemCommit : 0y0+0x000 Protection : 0y00110 (0x6)+0x000 Spare : 0y00+0x000 PrivateMemory : 0y1

如果觉得《VAD 虚拟内存》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。