1.问题描述:
2.注意事项:
(1)首先判断头部的空白区够不够加节表, 所有的节表后面必须跟40个字节0。所以添加节表时得确保有两个节表大小(即80字节)的连续剩余。
分三种情况:a.头部的最后一个节表后直接可以放下两个节区
b.节表后放不下,但是dos头后pe前可放下
c.前两种情况都不行,需扩大最后一个节把代码填进去
(2)新增节需要修改的内容:
SizeOfImage
NumOfSections
节表内属性
(3) 在内存中添加新的节表时,需要注意:
新增节表中的VirtualAddress(内存中的偏移)必须是最后一个节表中VirtualAddress+max(VirtualSize,SizeOfRawData)
(注意: 不一定SizeOfRawData比VirtualSize大)
新增节表中的PoinTtoRawData(文件中的偏移)是最后一个节表中的PoinTtoRawData+SizeOfRawData
3.手工实现:
4.代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#define test 1
#define size_surplus_sizeofheader 0x50
DWORD ToLoaderPE(LPSTR file_path, PVOID* pFileBuffer);
BOOL MemoryToFile(PVOID pMemBuffer, DWORD size, LPSTR lpszFile);
DWORD GetSctionEmptySpace(PVOID pFileBuffer, DWORD SectionOrdinal);
DWORD Alignment(DWORD alignment_value, DWORD addend, DWORD address);
DWORD TestA