从可执行文件中删除.reloc节区
- .reloc节区
- EXE形式的PE文件中,“基址重定位表”项对运行没有什么影响,实际上,将其删除后程序仍能正常运行。
- VC++中生成的PE文件的重定位节区名为.reloc,删除该节区后文件照常运行,且文件大小将缩减,.reloc节区一般位于所有节区的最后。
- 若要删除位于文件末尾的.reloc节区,需要按照以下4个步骤操作:
- 整理.reloc节区头
- 删除.reloc节区
- 修改IMAGE_FILE_HEADER
- 修改IMAGE_OPTIONAL_HEADER
- 删除.reloc节区头
- 可以看到.reloc节区头从文件偏移270处开始,大小为28,使用Hex Editor打开该区域,全部用0覆盖填充。
- 删除.reloc节区
- 文件中.reloc节区的起始偏移为C000,从C000偏移开始一直使用Hex Editor删除到文件末尾所有数据。
- 修改IMAGE_FILE_HEADER
- 修改IMAGE_FILE_HEADER的Number of Sections项,将5改成4
- 修改IMAGE_OPTIONAL_HEADER
- 删除.reloc节区后,整个映射就随之减少相应大小,映射大小值存储在IMAGE_OPTIONAL_HEADER-size of Image中,需要对其修改。
- .reloc节区的VirtualSize值为E40,将其根据Section Alignment拓展后编程1000,所以应该从Size of Image减去1000才正确。
- 修改后reloc.exe文件就能够正常运行了。