PE节修改

新增节

1、判断是否有足够的空间,可以添加一个节表.

判断条件:

SizeOfHeader - (DOS + 垃圾数据 + PE标记 + 标准PE头 + 可选PE头 + 已存在节表)>= 2个节表的大小

2、需要修改的数据

  1. 添加一个新的节(可以copy一份)

  2. 在新增节后面 填充一个节大小的000

  3. 修改PE头中节的数量

  4. 修改sizeOfImage的大小

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

6)修正新增节表的属性

扩大节

1、拉伸到内存

2、分配一块新的空间:SizeOfImage + Ex

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

SizeOfRawData = VirtualSize = N

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

4、修改SizeOfImage大小

SizeOfImage = SizeOfImage + Ex

合并节

1、拉伸到内存

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

Max = SizeOfRawData > VirtualSize ? SizeOfRawData : VirtualSize

SizeOfRawData = VirtualSize =

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

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

4、修改节的数量为1