新增节
1、判断是否有足够的空间,可以添加一个节表.
判断条件:
SizeOfHeader - (DOS + 垃圾数据 + PE标记 + 标准PE头 + 可选PE头 + 已存在节表)>= 2个节表的大小
2、需要修改的数据
添加一个新的节(可以copy一份)
在新增节后面 填充一个节大小的000
修改PE头中节的数量
修改sizeOfImage的大小
再原有数据的最后,新增一个节的数据(内存对齐的整数倍).
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