一、流程
1、File-> FileBuffer
2、获取头信息
3、获取结构体数组的信息
4、获取导出表的地址RVA和FOA
5、获取导出表在文件中的地址
6、循环重定位表
7、获取数据块的FOA
8、判断数据块在那个节中
9、获取要修改数据的个数和位置
10、循环要修改的数据并判断是否要修改
11、指向下一个数据块
二、流程
1、File-> FileBuffer
2、获取头信息
3、获取结构体数组的信息
//指向数组
PIMAGE_DATA_DIRECTORY pDataDirectory = pOptionHeader->DataDirectory;
4、获取导出表的地址RVA和FOA
//重定位表的地址Rva
DWORD dwRelocationTableRva = pDataDirectory[5].VirtualAddress;
//重定位表的地址Foa
DWORD dwRelocationTableFoa = RvaToFoa(pFileBuffer,dwRelocationTableRva);
5、获取导出表在文件中的地址
//重定位表在文件中的地址
PIMAGE_BASE_RELOCATION pRelocationTable = (PIMAGE_BASE_RELOCATION)((DWORD)pFileBuffer + dwRelocationTableFoa);
6、循环重定位表
//循环重定位表
for(int i=1 ; pRelocationTable->SizeOfBlock && pRelocationTable->VirtualAddress ; i++)
{
}
7、获取数据块的FOA
//重定位表中数据的Foa
DWORD Foa = RvaToFoa(pFileBuffer,pRelocationTable->VirtualAddress);
8、判断数据块在那个节中
//循环判断数据在哪个节中
for(int t=0 ; pNTHeader->FileHeader.NumberOfSections ; t++)
{
//节的起始和结束位置
DWORD Begin = RvaToFoa(pFileBuffer,pSectionHeader[t].VirtualAddress);
DWORD End = RvaToFoa(pFileBuffer,pSectionHeader[t].Vir