一个mdl相关的问题
感觉挺有意义的,细节问题
http://www.kernelmode.info/forum/viewtopic.php?f=14&t=4318
这个人代码到底犯了什么错误
I want to place a jumper in Win 10 x64 win32k .text (PatchGuard disabled). However it seems this no longer works (on Windows 8 x64 and before it did):
PMDL Mdl = NULL;
__try
{
// Create a descriptor
Mdl = IoAllocateMdl(Address,Length,FALSE,FALSE,NULL);
// Lock pages for io modification access
MmProbeAndLockPages(Mdl,KernelMode,IoModifyAccess);
// Map physical locked page
AddrMapped = MmMapLockedPagesSpecifyCache(Mdl,KernelMode,MmNonCached,NULL,FALSE,HighPagePriority);
RtlCopyMemory(AddrMapped, Data, Length);
}
// Cleanup
__finally
{
if(AddrMapped)
MmUnmapLockedPages(AddrMapped, Mdl);
if(Mdl != NULL)
{
MmUnlockPages(Mdl);
IoFreeMdl(Mdl);
}
}
It fails with: ATTEMPTED_WRITE_TO_READONLY_MEMORY (be) at MmMapLockedPagesSpecifyCache.
I am calling the code from the context of csrss.exe (GUI process) and before get win32k via ZwQuerySystemInformation SystemModuleInfo.
这是vxk的回答
IoAllocateMdl+MmProbeAndLockPages后Map的话,有一个问题就是如果是内核地址的话,会分分钟教你重新做人。
可以2次映射内核地址
只是丫忘了 一个东西
你想让内核地址再次映射内核抵制,需要MmBuildMdlForNonPagedPool一下,当然如果是usermode地址映射内核地址,内核地址映射usermode地址,都不用。but 这里 MmBuildMdlForNonPagedPool 其实是不是卵用,并不是很清晰。
另外就是MapXX的这个API直接使用有极大概率爆炸,如果不是要双份内核地址的话,直接用MmGetSystemAddressForMdl(Safe会不支持低版本的windows)比较和谐(这样的话,连Build也不用了)。
usermode到usermode是没问题的
因为 ZwProtectVirtualMemory有时候会映射一份新的base出来
老外这段代码里:
再仔细看发现丫出问题的其实是ATTEMPTED_WRITE_TO_READONLY_MEMORY 这个错误是在RtlCopyMemory时发生的——后面老外都在研究MmMap这个API,API不会出错啊不会出错啊。
MmMapLockedPagesSpecifyCache 是成功的,但是PTE的W位没有变化——MmNonCache和MmCache并不影响W位,只有MmWriteCombined啊。
一般来说,W位会被MmMap的NonCache改写为1,但是有个前提,就是这个IoMapping = 0
那么问题来了 既然api没错 地址也刷了 但是pte不改变是谁的错呢。
最新文章
- UWP学习记录12-应用到应用的通信
- [转载] 不查资料确定int型整数的最大值和最小值
- JVM常量池
- http://blog.csdn.net/ClementAD/article/category/6217187/2
- 从StackOverflow来的值得回味的编程观点
- jQuery 2.0.3 源码分析 bind/live/delegate/on
- DiskFileItemFactory类---分析及运用
- str*函数和大小端判断
- DNS加速之“智能DNS”跟“双线加速”、“CDN加速”的区别
- 转载:Java多线程中join方法的理解
- 为什么使用";use strict";可以节约你的时间
- bzoj 1560 [JSOI2009]火星藏宝图(DP)
- MongoDB C++ 2.4.5 driver 编译安装问题
- java第二周学习日记
- DEP受保护的问题(尤其是Outlook)
- hdu 4873 ZCC Loves Intersection(大数+概率)
- 微软vs2015先行,Visual Studio 2015正式版离线iso及在线下载(附key)附带百度云盘地址
- HDU1251-统计难题(字典树)
- MessageBoxButtons.OKCancel的选择事件
- 老男孩Python全栈开发(92天全)视频教程 自学笔记06