软件下载 | 资讯教程 | 最近更新 | 下载排行 | 一键转帖 | 发布投稿
您的位置:最火下载站 > 电脑教程 > 编程开发 > 工具与技巧 > 技巧:获取PE重定位表信息的方法

技巧:获取PE重定位表信息的方法

  为什么要PE重定位:当链接器生成一个PE文件时,它假设这个文件执行时会被装载到默认的基地址处,并且把code和data的相关地址都写入PE文件 中。如果装入时按默认的值作为基地址装入,则不需要重定位。但如果可执行文件被装载到虚拟内存的另一个地址,链接器所登记 的那个地址就是错误的,这时就需要用重定位表来调整。在PE文件中,它往往单独分为一块,用”.reloc”表示。

  EXE文件不存在重定位表:对于EXE文件来说,每个文件总是使用独立的虚拟地址空间,所以EXE总是能够按照这个地址装入,这意味着EXE 文件不再需要重定位信息。

  DLL文件需要重定位表:对于DLL文件来说,由于多个DLL文件全部使用宿主EXE文件的地址空间,不能保证装入地址没有被其他DLL使用, 所以DLL文件必须包含重定位表。

  加载器如何重定位:加载器会比较基址和实际的装入地址,计算出一个差值,并加到重定位地址上。

  重定位表的结构:

IMAGE_BASE_RELOCATION STRUC
VirtualAddress DWORD ?;重定位数据开始RVA地址
SizeOfBlock DWORD ?;重定位块的长度
TypeOffset WORD ?;重定位项数组
IMAGE_BASE_RELOCATION ENDS

  实例:

获取PE重定位表信息

  获取PE重定位表信息

    相关阅读
    栏目导航
    推荐软件