-
-
[求助]在内核给用户空间做patch时一些内存操作的问题。
-
发表于: 2010-11-16 13:55 3251
-
我看到一段代码是下面这样的。。它是可行的。跑起来能正常运行。但有些要点我没有搞清楚。所以我不太确定代码这样些的原理。请达人指点一下。
首先:
KeAttach到目标进程
申请一块内存
ZwAllocateVirtualMemory(hProcess,&pHookCode,0,&Length,MEM_RESERVE | MEM_COMMIT,PAGE_EXECUTE_READWRITE);
pMdl = IoAllocateMdl(pHookCode, Length, 0, 0, 0);
MmBuildMdlForNonPagedPool(pMdl);
这里MmBuildMdlForNonPagedPoolMSDN的解释是"The input MDL virtual address must be within the nonpaged portion of system space",那么显然pHookCode不是非分页内存。那为什么这样是可行的?
pMdl->MdlFlags |= MDL_MAPPING_CAN_FAIL;
SystemBuffer = MmMapLockedPages(pMdl, KernelMode);
KeDetachProcess
还有一个问题是。。。虽然我得到了一个SystemBuffer地址。但是我是不是仍然可以通过pHookCode这个虚拟地址读写进程内存?
这不会导致什么问题吧?
首先:
KeAttach到目标进程
申请一块内存
ZwAllocateVirtualMemory(hProcess,&pHookCode,0,&Length,MEM_RESERVE | MEM_COMMIT,PAGE_EXECUTE_READWRITE);
pMdl = IoAllocateMdl(pHookCode, Length, 0, 0, 0);
MmBuildMdlForNonPagedPool(pMdl);
这里MmBuildMdlForNonPagedPoolMSDN的解释是"The input MDL virtual address must be within the nonpaged portion of system space",那么显然pHookCode不是非分页内存。那为什么这样是可行的?
pMdl->MdlFlags |= MDL_MAPPING_CAN_FAIL;
SystemBuffer = MmMapLockedPages(pMdl, KernelMode);
KeDetachProcess
还有一个问题是。。。虽然我得到了一个SystemBuffer地址。但是我是不是仍然可以通过pHookCode这个虚拟地址读写进程内存?
这不会导致什么问题吧?
赞赏
他的文章
看原图
赞赏
雪币:
留言: