扩大节、新增节、合并节

详细查看https://bbs.kanxue.com/thread-281836.htm#msg_header_h3_9

扩大节

最好只扩大最后一个节

1、分配一块新的空间了,大小为S

2、将最后一个节的SizeOfRawData和VirtualSize改成N

​ N = (SizeOfRawData或者VirtualSize内存对齐后的值)+S

3、修改SizeOfImage大小

4、如果不能执行就在节的末尾的Characteristics属性改成具有可执行的功能

新增节

1、先判断节表有没有空间可以新增一个节表成员

2、在节表新增一个成员

3、修改PE头中节的数量

4、修改SizeOfImage大小

5、在原有数据的最后,新增一个节的数据(内存对齐整数)

6、修正新增节表属性

合并节

先拉伸,后合并,需要用拉伸后的对齐法进行合并

1、按照内存对齐展开

2、将第一个节的内存大小、文件大小改成一样

​ Max = SizeOfRawData>VirtualSize ?SizeOfRawData:VirtualSize

​ SizeOfRawData=VirtualSize=最后一个节的VirtualAddress+Max-SizeOfHeaders内存对齐后的大小

3、将第一个节的属性改为包含所有节的属性

4、修改节的数量为1