PMDL
MmCreateMdl(
IN PMDL MemoryDescriptorList OPTIONAL,
IN PVOID Base,
IN SIZE_T Length
);
DDK公开,导出
如果参数1为空,
先调用MmSizeOfMdl()确定描述此段地址的MDL结构所需要的内存大小
再调用ExAllocatePoolWithTag()在非分布内存池中分配标识为'Mmdi'大小为MmSizeOfMdl()返回值的内存
当分配成功或参数2不为空时:
清空Next,MdlFlags,计算出此MDL结构的总大小,填写Size域,再分别填写StartVa,ByteCount,ByteOffset
返回Mdl结构的首地址
kd> dt nt!_MDL
+0x000 Next : Ptr32 _MDL
+0x004 Size : Int2B
+0x006 MdlFlags : Int2B
+0x008 Process : Ptr32 _EPROCESS
+0x00c MappedSystemVa : Ptr32 Void
+0x010 StartVa : Ptr32 Void
+0x014 ByteCount : Uint4B
+0x018 ByteOffset : Uint4B
ebp
ebp+4
ebp+8 参数1,MDL结构地址
ebp+c 参数2,起始地址
ebp+10 参数3,大小
nt!MmCreateMdl:
805057d0 8bff mov edi,edi
805057d2 55 push ebp
805057d3 8bec mov ebp,esp
805057d5 8b4508 mov eax,dword ptr [ebp+8] ;eax=参数1,Mdl结构地址
805057d8 85c0 test eax,eax
805057da 56 push esi
805057db 8b750c mov esi,dword ptr [ebp+0Ch];esi=地址
805057de 57 push edi
805057df 8b7d10 mov edi,dword ptr [ebp+10h];edi=大小
805057e2 7518 jne nt!MmCreateMdl+0x2c (805057fc)
;如果给定MDL地址为0的话,
805057e4 684d6d646c push 6C646D4Dh 'Mmdi'
805057e9 57 push edi
805057ea 56 push esi
805057eb e8b6ffffff call nt!MmSizeOfMdl (805057a6);取得需要的MDL结构的大小
805057f0 50 push eax
805057f1 6a00 push 0
805057f3 e888f80300 call nt!ExAllocatePoolWithTag (80545080);分配内存
805057f8 85c0 test eax,eax
805057fa 7434 je nt!MmCreateMdl+0x60 (80505830)
;如果给定的MDL地址不为空的话,或者由系统分配好了内存
805057fc 832000 and dword ptr [eax],0 ;Next清0
805057ff 6683600600 and word ptr [eax+6],0 ;MdlFlags清0
80505804 8bce mov ecx,esi ;ecx=esi=地址
80505806 81e1ff0f0000 and ecx,0FFFh ;ecx=页内偏移
8050580c 8d9439ff0f0000 lea edx,[ecx+edi+0FFFh] ;ecx=内存偏移 edi=内存大小
80505813 c1ea0c shr edx,0Ch ;内存块占用的页数
80505816 8d14951c000000 lea edx,[edx*4+1Ch] ;EDX=MDL头结构大小+后面Pages数组的大小
8050581d 81e600f0ffff and esi,0FFFFF000h ;esi=页地址
80505823 66895004 mov word ptr [eax+4],dx ;Mdl->_Size域
80505827 897010 mov dword ptr [eax+10h],esi;Mdl->StartVa 页地址
8050582a 894818 mov dword ptr [eax+18h],ecx;Mdl->ByteOffset 页内偏移
8050582d 897814 mov dword ptr [eax+14h],edi;Mdl->ByteCount 内存大小
80505830 5f pop edi
80505831 5e pop esi
80505832 5d pop ebp
80505833 c20c00 ret 0Ch
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!