-
-
[旧帖]
[求助]PE的RVA和RAW
0.00雪花
-
发表于:
2012-4-13 10:52
1521
-
[旧帖] [求助]PE的RVA和RAW
0.00雪花
突然想到这个问题,
(1).PE文件中的数据按照磁盘数据标准存放,以0x200字节为基本单位进行组织
(2).当代码装入内存后,将按照内存数据标准存放,并以0x1000字节位基本单位进行组织
那么在写PE文件分析器时,都是把文件做为内存映射文件加载再分析,在PE运行时,win加载器把PE也是做为内存映射文件加载,并修正位置,疑问点:
1.直接把文件做为内存映射文件加载和用win加载器加载后,它们的内存平面布局是一样的吗?(都是(2)在内存中不是吗?)win加载器修正位置是改了什么?
2.我对1产生了怀疑是因为在win95上提到了
DWORD PointerToRawData
“这是「以文件起头为基准」的偏移值,section 的原始资料可以在该处寻获。如果你自己
以内存映像的方式映像了一个 PE 档或 COFF 档(而不是经由操作系统的加载器),
这个字段就比 VirtualAddress 重要多了。因为这种情况下你对整个文件有一个完全的线
性映像,所以你必须根据此值找到 section 的资料,而不是根据 VirtualAddress 中的 RVA
(Relative Virtual Address )值”
这是侯杰大神翻译的win95第8章原话,
对整个文件有一个完全的线
性映像,线性映射明显就是说它们两者是一致的,因为前三个段DOS,PE头内存中和文件中是一致的
那这么说直接内存映射文件加载,它的布局和磁盘文件应该一致了,使用的是RVA?
看雪的PE上也说用UE之类的打开看到是RVA而不是RAW,
大神指点下,内存映射文件和直接PE被加载,它们的内存布局有什么不同????
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课