百度空间 | 百度首页 
 
查看文章
 
如何从内存基址推算到映射文件的文件偏移
2009-08-26 23:08

今天遇到一个问题,需要从一块内存基址获取这个基址MapViewOfFile时指定的文件偏移。先是请教了同事A(狙X同学),同事A一口咬定系统不会存储这个信息。

接着请教了同事B(SUXXXX),也表示不知道

于是自己跟踪了一下,得解:

首先通过基址在avl table中定位到基址所在的MmVad结构,然后MmVad->u2->LoadFlags2->FileOffset,就存放着文件的偏移(page based)

大家有什么更优美,更稳定(例如R3实现)的方法,也可以指点一下我


类别:默认分类 | 添加到搜藏 | 浏览() | 评论 (5)
 
最近读者:
 
网友评论:
11
2009-08-28 13:32 | 回复
本BLOG禁止“沙发”、“围观”、“路过”或类似性质无意义回帖,违者删除。
 
19
2009-09-04 16:24 | 回复

因为subsection用MmAllocationFragment来分,所以可以从pte和subsection base的差额, 再相对于subsection->StartingSector 来算就可以得到fileoffset。 这也是page handler的做法


昨天MJ叫我来看看,就顺便来逛了。。。不少博文啊,MJ0011真是高产动物。
 
22
2009-09-04 23:49 | 回复
博主来了。。。
恩,MJ同学的方法比较简单直接~ :)
StartingSector 还要对数据映射对齐~
 
25
2009-09-05 01:08 | 回复
mm....应该MJ的方法简单吧


因为用subsection来算是要取pte然后来减特定subsection的base.这里对齐是因为data mapping采用不同于image mapping的unit对齐方式。

MJ的方法是不需要管subsection的,vad里存的本身就是section(不是subsection)的offset了,这里的对齐应该只是主机页对齐,本身ring 3的mapviewoffile的参数就要求对齐的,没什么特别影响。
 
34
2009-09-08 20:12 | 回复
终于知道这段代码背后的真实目的了
这功能环3还真是做不了,或者我不知道
但是带个驱动也确实比较麻烦...
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu