首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MDL的一段代码看不懂,该如何解决

2012-01-13 
MDL的一段代码看不懂SSDT hook的我就写下几个重要的APIg_pmdlSystemCallIoAllocateMdl(KeServiceDescript

MDL的一段代码看不懂
SSDT hook的


我就写下几个重要的API

g_pmdlSystemCall=IoAllocateMdl(KeServiceDescriptorTable.ServiceTableBase,KeServiceDescriptorTable.NumberOfServices*4,FALSE,FALSE,NULL);
MmBuildMdlForNonPagedPool(g_pdmlSystemCall);
g_pdmlSystemCall->MdlFlags=g_pmdlSystemCall->MdlFlags|MDL_MAPPED_TO_SYSTEM_VA;
MappedSystemCallTable=(PVOID*)MmMapLockedPages(g_pmdlSystemCall,KernelMode);

这几个API能不能讲讲在内存中是如何操作的呢?
比如什么虚拟内存了怎么映射的?这些能不能说说,谢谢了!


[解决办法]
IoAllocateMdl 分配MDL描述咯 MDL描述内存也有属性和长度么 需要分配
MmBuildMdlForNonPagedPool 设置为非分页内存 在程序运行时 不会移出内存

g_pdmlSystemCall->MdlFlags=g_pmdlSystemCall->MdlFlags|MDL_MAPPED_TO_SYSTEM_VA;
这个不大记得了 应该是说明MDL描述的系统内存

至于虚拟内存怎么映射什么的 这个是必备知识 三言两语说不清楚的
需要仔细看相关书籍 

我记得这里需要使用MDL描述个内存 是因为根据系统服务表(ssdt)得到原始API的地址或者代码等存放位置是不可改写的
你需要用MDL描述这段内存 然后改变其只读属性 才能改变原始API的地址或者代码 这样才能起到HOOK作用

热点排行