zoukankan      html  css  js  c++  java
  • 一个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不改变是谁的错呢。

  • 相关阅读:
    序列号问题(入库检带序列号,冲销入库无序列号(变态情况))
    sm30表维护做排序
    HR函数学习03——维护信息类型1008
    HR函数学习02——分配组织单位
    机器学习知识积累
    机器学习数学知识积累之高等数学微积分
    机器学习数学知识积累之线性代数解析几何,微积分
    机器学习数学知识积累之数理统计
    在博客园使用LaTex编辑学术论文级别的data science文章
    机器学习数学知识积累之概率论
  • 原文地址:https://www.cnblogs.com/suanguade/p/5842047.html
Copyright © 2011-2022 走看看