1、找到文件加载到内存的基址
通常为0x0040 0000
2、取得内存对齐粒度
3、加载pe头,按照内存对齐粒度读取到指定起始地址的内存处
4、加载各个节。得到节数目,定位节表,按照内存对齐粒度读取到内存,不足的用0填充。
5、基址不对,需要重定位修复。
// LoadPeWithRead.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <tchar.h>
#include <Windows.h>
//以dwAlignment 对齐dwOperateNum 值,也就是让dwOperateNum为dwAlignment的整数倍
DWORD AlignmentNum(DWORD dwOperateNum, DWORD dwAlignment )
{
if (dwAlignment == 0)
{
return dwOperateNum ;
}
int iTemp = dwOperateNum % dwAlignment;
if (iTemp != 0)
{
return dwOperateNum + dwAlignment - iTemp;
}
return dwOperateNum ;
}
int main(int argc,