zoukankan      html  css  js  c++  java
  • PE知识复习之PE合并节

                          PE知识复习之PE合并节

    一丶简介

       根据上一讲.我们为PE新增了一个节. 并且属性了各个成员中的相互配合. 例如文件头记录节个数.我们新增节就要修改这个个数.

    那么现在我们要合并一个节.以上一讲我们例子讲解.

      以前我们讲过PE扩大一个节怎么做. 合并节跟扩大节类似. 只不过一个是扩大. 一个是合并了.

    合并节的步骤.

      1.修改文件头节表个数

      2.修改节表中的属性

        节.sIzeofRawData 节数据对齐后的大小.

      3.修改扩展头中PE镜像大小 SizeofImage

      4.被合并的节以0填充.

    二丶实战合并一个节

      1.修改文件头中节表个数

         为什么修改应该不用多说了. 我们既然合并. 那么节就要少一个.那么自然就进行修改了.

    原节表有8个.我们修改为7即可.

      2.修改节.SizeofRawData 节数据对齐后的大小.

     

    我们把最后的AAAA节.合并到上一个节.rsrc中.

      .rsrc.SizeofRawData = .文件对齐(rsrc.SizeofRawData + AAA.节数据的大小)

    修改这个属性就按照上面的公式修改就行.原来节数据大小.加上要被合并的节的数据大小.按照文件对齐存放即可.

      例如下图:

      

    原来节数据对齐后的大小是0x600. AAAA节数据对齐后的大小是0x1000.那么修改.rsrc.SizeofRawData 为 0x1600即可.

      最后一个节表以0填充即可.

      3.修改扩展头的PE镜像大小. SizeofImage

    我们上一讲新增了一个节.所以映像大小为0x1E000. 所以现在要进行修改.合并了0x1000数据大小.那么改为0x1D000即可.

      4.测试程序

    程序可以直接运行.那么内存中看看节展开位置有没有我们的合并节的节数据.

    内存中0x41c000位置.就是节展开位置.我们没有合并之前.并没有我们的FFFF填充的数据.合并之后.出现了数据.说明已经成功合并了这个节了.

    也相当于对这个节进行扩大了.

      

     

  • 相关阅读:
    实战DeviceIoControl 之中的一个:通过API訪问设备驱动程序
    hibernate官方新手教程 (转载)
    C++ 清空消息队列
    java中接口的定义与实现
    Scrum 学习笔记
    Ubuntu中全然卸载Nginx
    ScrollView 在嵌套 ViewPager 时出现的问题
    Java的递归算法
    Android GPS获取当前经纬度坐标
    【数据结构】——排序算法——1.1、直接插入排序
  • 原文地址:https://www.cnblogs.com/iBinary/p/9737761.html
Copyright © 2011-2022 走看看