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

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

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

DWORD   ImageBase;

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

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

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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

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