能力值:
( LV3,RANK:20 )
|
-
-
2 楼
搞不懂怎么还有一个内存映射文件?是不是指用winhex之类的查看pe文件的时候?
如果是这样的话,那么内存映射的文件查看到的不就是文件在硬盘上的样子咯?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
createfilemapping呀
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
楼主你想吓死我啊。。。
我还以为我以前的知识是错的呢。
去试了下,我其实没错。
实际上,PE文件里面对节的对齐是强制的,必须对齐到页边界4096字节处。
RVA没有对齐的,运行的时候会提示不是有效的win32执行文件,至少在我win7 32bit上是这样
实际上楼主你的那个说法只是在强调内存映射不需要作对齐而已。
顺便说下,基地址不止要在4096字节边界对齐,还必须按64k对齐。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
那到底是跟磁盘文件一样还是按区段对齐对齐的额
恕我愚钝
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
意思就是说PE文件的映射是预先对齐的,不需要Windows再去做对齐了。
没有预先对齐的文件被认为是无效的。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
大概看明白了。。
这个问题真是越来越混乱。建议楼主不要看你引用的那段话了。
说不上是误人子弟,但是是自己在绕圈子。有点谭浩强的风格。。
原话是“内存映射并不对PE文件进行PE节区对齐".
它这里说的是自己做文件映射。
文件映射是一个通用的机制,方便你以一种特殊的风格操纵文件的,而且充分利用了内存分页因此效率很高。
文件映射可以映射任何文件,而且没有对齐的要求。
这里的意思是,对任何文件的映射,都没有对齐的要求。
好吧。。PE文件也是文件对吧。没错,PE文件映射的时候自然也没有对齐
上面红字是完完全全的废话。这有必要专门说一次么?
如果楼主对C\C++\Delphi这样的本地语言有经验的话,可以去学学利用内存映射来操纵文件
比较有趣一点的例子就是利用内存映射来在2个不同进程间交换大量信息。
这样等楼主清晰的明白了内存映射本身之后,就不会再被这句话迷惑了。
|
|
|