首页
社区
课程
招聘
[讨论]看过不少讲PE文件格式的文章,有一点疑惑.
发表于: 2007-8-14 12:44 4605

[讨论]看过不少讲PE文件格式的文章,有一点疑惑.

2007-8-14 12:44
4605
许多讲PE格式的文章提到,   

DWORD   ImageBase;

这个字段的时候都会讲到,这个是PE文件的优先加载地址.

那么如果在没有加载到PE头中指定的优先加载基址的情况下.(比如优先加载地址有冲突)

1. PE加载器会如何处理呢 ?
2. 这个时候PE文件又该加载到哪里呢?
3. 如果可以继续加载,这个真实的加载地址该如何获取呢


[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
等高手来解答一下....
2007-8-14 14:24
0
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
文件执行时将被映像到指定内存地址中,这个初始内存地址称为基地址(ImageBase)。当然这只是程序文件中声明的,程序运行时能够保证系统一定满足其要求吗?
对于EXE的程序文件来说,Windows系统会尽量满足。例如某EXE文件的基地址为0x400000,而运行时Windows系统提供给程序的基地址也同样是0x400000。在这种情况下就不需要进行地址“重定位”了。
不过对于DLL的动态链接库文件来说,Windows系统没有办法保证每一次DLL运行时提供相同的基地址。这样“重定位”就很重要了。有关重定位请参考PE结构。
2007-8-14 14:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
总结一下:
如果是exe文件,那么你提的问题是不存在的,因为加载器加载exe文件并将其映射到虚拟地址空间中去,对应这个进程来说它的虚拟IMAGEBASE就是唯一的;
如果是dll文件,如楼上说的需要进行“重定位”。
2007-8-14 15:23
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
多谢各位,果然还是我看书不仔细。.

如果这个映像文件是一个DLL,那么这个DLL就不一定会装载到ImageBase要求的位置。所以一旦这个文件被装载进入了一个进程,实际的ImageBase值应该通过使用GetModuleHandle来检验。
2007-8-14 15:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
新手支持!!!!!!!!!!!!
2007-8-14 22:51
0
游客
登录 | 注册 方可回帖
返回
//