从可执行文件中删除.reloc节区

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值