本文共 1664 字,大约阅读时间需要 5 分钟。
将程序安装内存对齐的方式读取到内存有两种方法:
1、内存映射文件
2、PE加载器模拟法
1、内存映射文件
lpHeader所指内存是只读的,尽管是PAGE_READWRITE
// LoadPeWithMap.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include#include int main(int argc, char* argv[]){ TCHAR filename[] = _T ("c:\\windows\\notepad.exe"); PBYTE lpHeader = NULL ; HANDLE hMap = NULL ; HANDLE hFile = CreateFile (filename, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL , OPEN_EXISTING, NULL, NULL ); if (INVALID_HANDLE_VALUE == hFile) { goto SAFE_EXIT; } hMap = CreateFileMapping(hFile, NULL , PAGE_READWRITE| SEC_IMAGE, 0, 0, NULL ); if (hMap == NULL ) { goto SAFE_EXIT; } lpHeader = ( PBYTE)MapViewOfFile(hMap, FILE_MAP_READ | FILE_MAP_WRITE, NULL, NULL, 0); if (lpHeader == NULL ) { goto SAFE_EXIT; }SAFE_EXIT: if (lpHeader != NULL ) { UnmapViewOfFile(lpHeader); } if (hMap != INVALID_HANDLE_VALUE && hMap != NULL) { CloseHandle(hMap); } if (hFile != INVALID_HANDLE_VALUE && hFile != NULL) { CloseHandle(hFile); } return 0;
转载地址:http://jpumf.baihongyu.com/