WRK1_2笔记
Vinc
溪云初起日沉阁,山雨欲来风满楼。
展开
-
wrk中描述进程VAD的AVL树
ntrtl.h //定义基础二叉树以及基本方法。 splay.c //实现ntrtl.h中关于二叉树的方法。 avltable.c //在ntrtl.h定义的二叉树基础上实现avl树 在ps.h //定义了VAL的节点定义 addrsup.c //在avltable的基础上实现对地址空间avl树的一系列操作。 第一节 基础二叉树定义和实现 在ntrtl.h中,定义和实现了原创 2016-03-12 19:01:00 · 1572 阅读 · 0 评论 -
wrk笔记:申请内存的大致流程(x64)
NtAllocateVirtualMemory - allocvm.c 1.检查各参数的有效性,如果当前进程不是参数制定的进程,那么附加到目标进程。 2.调整需要申请的大小,使之增加到页面的整数倍。计算需要申请的页面数。 CapturedRegionSize = ROUND_TO_PAGES (CapturedRegionSize); NumberOfPages = BYTES_TO_PA原创 2016-03-12 19:05:06 · 1229 阅读 · 0 评论 -
WRK笔记:为一块VA区域创建PDE
allocvm.c MiCreatePageTablesForPhysicalRange ( IN PEPROCESS Process, IN PVOID StartingAddress, IN PVOID EndingAddress ) 1.计算需要从StartingAddress到EndingAddress需要多少物理页面才够装下页目录。原创 2016-03-12 19:06:54 · 723 阅读 · 0 评论 -
ADDRESS_AND_SIZE_TO_SPAN_PAGES宏
//++ // // ULONG // ADDRESS_AND_SIZE_TO_SPAN_PAGES ( // IN PVOID Va, // IN ULONG Size // ) // // Routine Description: // // ADDRESS_AND_SIZE_TO_SPAN_PAGES 宏输入一个虚拟地址和长度,返回他们需要的页面数。 // /翻译 2016-03-13 14:25:46 · 718 阅读 · 0 评论 -
MmInitializeMdl
//++ // // VOID // MmInitializeMdl ( // IN PMDL MemoryDescriptorList, // IN PVOID BaseVa, // IN SIZE_T Length // ) // // Routine Description: // // 这个例程初始化一个MDL的头部。 // // Arguments翻译 2016-03-13 14:35:50 · 710 阅读 · 0 评论 -
IoAllocateMdl
PMDL IoAllocateMdl( IN PVOID VirtualAddress, IN ULONG Length, IN BOOLEAN SecondaryBuffer, IN BOOLEAN ChargeQuota, IN OUT PIRP Irp OPTIONAL ) /*++ Routine Description: 分配一块内翻译 2016-03-13 14:39:26 · 2871 阅读 · 0 评论 -
MDL结构
// // I/O system definitions. // // 定义一个内存描述符列表(MDL) // // 一个MDL通过一系列物理页面描述在虚拟缓冲中的页面。 // 通过一个队列描述与缓冲区相关的页面,这个队列的内存位置紧跟着MDL头结构之后。 // // 一个简单的计算队列的地址的方法是在这个MDL的地址上加一: // // Pages = (PPFN_NUMBER) (翻译 2016-03-12 18:57:25 · 2294 阅读 · 0 评论