Re: 资料查了好多,就一点,哪个大牛帮忙补下

Windows内核

资料查了好多,就一点,哪个大牛帮忙补下


一鱼之歌 2009-02-13, 01:16 上午
想查看在页被转换出物理内存后,系统怎么样从页面文件中找回来。下面只是我找到的一点信息

哪个帮我补全
==============================
页已被置换出物理内存。在这种情况下,Reserved1和Reserved2位域将包含系统在页面文件中定位该页的信息,因此,当需要访问该页时,可很快的将其换回物理内存

Re: 资料查了好多,就一点,哪个大牛帮忙补下


一鱼之歌 2009-02-14, 14:05 下午
-_-...........这方面资料真的好少,王宇兄来帮下

Re: 资料查了好多,就一点,哪个大牛帮忙补下


MJ0011 2009-02-15, 03:24 上午
简单来说,页被换出后,再访问则触发int 0xe缺页中断

系统会进入KiTrap0e,即系统默认的缺页中断处理例程

KiTrap0e会调用 MmAccessFault函数

该函数进行复杂的判断后发现是换出的页面后,调用函数MiDispatchFault来试图完成页面的访问

该函数再进行一系列复杂的判断后

通过Cc系统函数从文件系统缓存中读入数据

或者通过系统函数IoPageRead从pagefile或页面映射的section对应的文件中读入页面数据,最终实现页面的换入

Re: 资料查了好多,就一点,哪个大牛帮忙补下


一鱼之歌 2009-02-15, 04:44 上午
真的很复杂,。。。。。。。等以后工作再看了,今天这么晚还在。哈

Re: 资料查了好多,就一点,哪个大牛帮忙补下


王宇 2009-02-19, 12:30 下午

还真复杂...
我昨晚从 0x0E 开始简单地跟了一下

从 ENTER_TRAP、VERIFY_BASE_TRAP_FRAME(MODIFY_BASE_TRAP_FRAME)建立、校验 trap frame 开始,到 call  _MmAccessFault@16 再到 MiDispatchFault 里的4种区分 —— MiResolveProtoPteFault、MiResolveTransitionFault、MiResolveDemandZeroFault 以及 MiResolvePageFileFault(这就是所谓的 Page resides in paging file)。Build 完 MDL 和其他数据结构之后就要开始 IoPageRead 了(核心的参数就是上述几个例程的 OUT —— PMMINPAGE_SUPPORT) IoPageRead 会给 PMMINPAGE_SUPPORT->FilePointer 对应的设备对象发标志含有 IRP_PAGING_IO 的 IRP:

    irp->Flags = IRP_PAGING_IO | IRP_NOCACHE | IRP_SYNCHRONOUS_PAGING_IO | IRP_INPUT_OPERATION;

IoCallDriver 之后就可以跟踪 IRP 了。但后面我昨晚就没跟踪了,我猜是发到了 sr!SrPassThrough -> Ntfs!NtfsFsdRead,或是 FatFsdRead?

跟踪完也许可以写更强悍的 Shadow Walker 了...

Re: 资料查了好多,就一点,哪个大牛帮忙补下


一鱼之歌 2009-02-19, 14:14 下午
强大。。mark下来,可惜俺还没工作,要不也可以买本软件调试学学

Re: 资料查了好多,就一点,哪个大牛帮忙补下


MJ0011 2009-02-19, 17:29 下午
iopageread实际是发到了fileobject的filter上即FSD上
其fileobject是ntcreatepagingfile时存入mmpagefile链表内的

Powered by Community Server Powered by CnForums.Net