一个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不改变是谁的错呢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」