手写PE第六课 完善节区头并在区段中写入数据
写入.rdata段节表:
成员1,8个字节,表识该段的名称,我们这里是.rdata。
手写PE第六课 完善节区头并在区段中写入数据
成员2,4个字节,表示有效代码所占的字节数。我们不知道有多少个有效字节,这里有两种方法来填写这个值,第一就是填写整个段在内存中对齐后的大小10000h,第二就是打开1.exe做参考,我们用第二种方法写入52 00 00 00。
手写PE第六课 完善节区头并在区段中写入数据
成员3,4个字节,表示在.rdata段映射到内存中的起始地址,我们知道.rdata是紧跟.text段后的,.text段的起始地址为1000h大小为1000h,那么紧接着text段的.rdata端应该是1000h+1000h=2000h 也就是00 20 00 00”。
手写PE第六课 完善节区头并在区段中写入数据
成员4,4个字节,表示.rdata段在文件中所占的大小。依然按照对齐后的大小200h来填写,所以此值为“00 02 00 00”。
手写PE第六课 完善节区头并在区段中写入数据
成员5,4个字节,表示.rdata段在文件中的起始地址,上面已经知道.text段的起始地 址为400h大小为200h,那么他的值实际上也就是.text段的起始偏移地址+.text段的大小,此值为400h+200h=600h“00 06 00 00”。
手写PE第六课 完善节区头并在区段中写入数据
成员6,7,8,9,共占12个字节,都仅用于目标文件,我们这里统统填为零。
手写PE第六课 完善节区头并在区段中写入数据
手写PE第六课 完善节区头并在区段中写入数据
成员10,4个字节。包含标记以指示节属性,我们这里写入40 00 00 40
手写PE第六课 完善节区头并在区段中写入数据
写入.data段节表:
成员1,8个字节,表识该段的名称,我们这里是.data。
手写PE第六课 完善节区头并在区段中写入数据
成员2,4个字节,表示有效代码所占的字节数。我们放入的数据就是Hello Word共11 个字节我们换为16进制为0B写入0B 00 00 00。
手写PE第六课 完善节区头并在区段中写入数据
成员3,4个字节,表示在.data段映射到内存中的起始地址,我们知道.data是紧跟.rdata段后的,.rdata段的起始地址为2000h大小为1000h,那么紧接着.rdata段的.data端应该是2000h+1000h=3000h 也就是00 30 00 00”。
手写PE第六课 完善节区头并在区段中写入数据
成员4,4个字节,表示.data段在文件中所占的大小。依然按照对齐后的大小200h来填写,所以此值为“00 02 00 00”。
手写PE第六课 完善节区头并在区段中写入数据
成员5,4个字节,表示.data段在文件中的起始地址,上面已经知道.rdata段的起始地
址为600h大小为200h,那么他的值实际上也就是.rdata段的起始偏移地址+.rdata段的大小,
此值为600h+200h=800h“00 08 00 00”。
手写PE第六课 完善节区头并在区段中写入数据
成员6,7,8,9,均占12个字节,都仅用于目标文件,我们这里统统填为零。
手写PE第六课 完善节区头并在区段中写入数据
成员10,4个字节。包含标记以指示节属性,我们这里写入C0 00 00 40
手写PE第六课 完善节区头并在区段中写入数据
这样整个PE头就完成了,我们知道Pe头在文件中也是按照文件对齐粒度来对齐的,
我们用c32看一下我们写入了多少个字节,一共写入了552个字节,换做16进制为228h
照对齐粒度这样是不行的我们必须让他的大小为200h的整数倍即400h,那么我们要填充
400h-228h=1D8个字节也就是472个字节。
手写PE第六课 完善节区头并在区段中写入数据
手写PE第六课 完善节区头并在区段中写入数据
现在整个PE头的大小为1024字节,正好是400H的倍数
现在用0填充段内的数据
PE头填充完毕后紧接着的就是各个段里的实际内容了,我们一一填充,大家是否记
得刚才我们写入节表时每一个段在文件里的大小都为200h,那么我们填充.text段200h,
.rdata段200h,.data段200h共200h+200h+200h=600h
插入512字节(200H)的节数据
手写PE第六课 完善节区头并在区段中写入数据
这就是text段
手写PE第六课 完善节区头并在区段中写入数据
rdata和data段方法都是一样滴,这里不做演示
由此整个PE文件部分就完成了,大家是不是有点等不及要去双击他了。哈哈,还早,还早。每一个段里面的数据我们还没有写入呢。
先看一下data的文件起始偏移地址
手写PE第六课 完善节区头并在区段中写入数据
在C32里面Ctrl+G,选择16进制,输入800,到达800H地址这个地方
手写PE第六课 完善节区头并在区段中写入数据
写入Hello Word 注意00结尾
|