博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
加载PE文件——内存映射文件
阅读量:2065 次
发布时间:2019-04-29

本文共 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/

你可能感兴趣的文章
剑指offer 33.第一个只出现一次的字符
查看>>
剑指offer 34.把数组排成最小的数
查看>>
剑指offer 35.数组中只出现一次的数字
查看>>
剑指offer 36.数字在排序数组中出现的次数
查看>>
剑指offer 37.数组中重复的数字
查看>>
剑指offer 38.丑数
查看>>
剑指offer 39.构建乘积数组
查看>>
剑指offer 57. 删除链表中重复的结点
查看>>
剑指offer 58. 链表中环的入口结点
查看>>
剑指offer 59. 把字符串转换成整数
查看>>
剑指offer 60. 不用加减乘除做加法
查看>>
leetcode 热题 Hot 100-3. 合并两个有序链表
查看>>
leetcode 热题 Hot 100-4. 对称二叉树
查看>>
Leetcode C++《热题 Hot 100-12》226.翻转二叉树
查看>>
Leetcode C++《热题 Hot 100-13》234.回文链表
查看>>
Leetcode C++《热题 Hot 100-14》283.移动零
查看>>
Leetcode C++《热题 Hot 100-15》437.路径总和III
查看>>
Leetcode C++《热题 Hot 100-17》461.汉明距离
查看>>
Leetcode C++《热题 Hot 100-18》538.把二叉搜索树转换为累加树
查看>>
Leetcode C++《热题 Hot 100-19》543.二叉树的直径
查看>>