首页
社区
课程
招聘
[旧帖] [求助]PE的RVA和RAW 0.00雪花
发表于: 2012-4-13 10:52 1522

[旧帖] [求助]PE的RVA和RAW 0.00雪花

2012-4-13 10:52
1522
突然想到这个问题,
(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被加载,它们的内存布局有什么不同????

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
内存映射(CreateFileMapping)的方式,加载到内存的形式跟 在磁盘上是一样的,如果是LoadLibrary,则是按内存RVA方式存在在内存中。
2012-4-13 12:03
0
雪    币: 88
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼上正解
2012-4-13 13:39
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢楼上的回答,那在EXE运行时,是不是和LOadLibrary一样,都是RVA,还有哪些情况是RVA,哪些是RAW,能不能都介绍下,谢谢 。
2012-4-13 20:05
0
游客
登录 | 注册 方可回帖
返回
//