我正在分析一个可执行文件的格式?我在image_optional_header中找到了Base重定位表,这个基本重定位表是什么?
答案 0 :(得分:3)
重定位表是一个查找表,列出了在非默认基址加载文件时需要修补的PE文件的所有部分。
以下是PE文件的微软规范:http://download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/pecoff.doc
一篇好文章:http://www.csn.ul.ie/~caolan/pub/winresdump/winresdump/doc/pefile2.html
答案 1 :(得分:1)
有2个重定位表。 COFF重定位表仅存在于.obj文件中,并且包含所有在翻译单元中访问未定义符号的指令中相对相对偏移的地址,并与它们对应的符号表 UNDEF 条目配对到当前所有偏移量都包含在 UNDEF 部分中的某个位置。基本的重定位表用于运行时,并内置于.obj文件中,并合并到最终的.exe中。如果将映像加载到不是ImageBase的地址,则将链接器选择并放置在PE标头中,则需要应用基本重定位表中的补丁。基本重定位表由基本重定位块组成,每个块描述一个4 KiB页面。块标题包含页面的RVA和块结构的大小。该块的其余部分包含2个字节字段的数组,其中2个字节的前4位指示重定位类型,后12位指示与需要应用重定位的页面RVA的偏移量。这将是指令中地址字段的偏移量。要重新定位,加载程序只需计算ImageBase与PEB中进程的实际基址之间的差,然后从该地址中添加/减去该差即可。基本重定位不会很多,因为代码中的大多数符号都使用相对相对寻址。