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作用