P42 新增节添加代码
1.首先判断头部的空白区够不够加节表
notebook.exe节表后被填充了数据,则需要使用到DOS头后面的填充垃圾值的区域。需要修改DOS头中的e_lfanew让它指向DOS头结束的下一行,将头部剩下的内容提升到前面
- 在DOS头后面一段的地址内存的是垃圾值
- 所有的节表后面必须跟40个字节的全0,一个节表长40字节。添加节表的时候需要注意剩余的空间中是否有80个字节
- sizeofheader 指的是文件对齐后头部(所以头+节表)的大小。
新增节需要修改的内容:
- SizeOfImage
- NumOfSections
- 节表内属性
在内存中添加新的节表时,需要注意: - 新增节表中的VirtualAddress(内存中的偏移)必须是最后一个节表中VirtualAddress+max(VirtualSize,SizeOfRawData)
(注意: 不一定SizeOfRawData比VirtualSize大) - 新增节表中的PoinTtoRawData(文件中的偏移)是最后一个节表中的PoinTtoRawData+SizeOfRawData