两种方法获取文件OEP
读取的字段都是一样的,只是一个直接从PE文件中读取,一个映射到内存后再读取
1.文件直接访问法
[cpp] view plain copy
- BOOL ReadOEPByFile(LPCTSTR szFileName)
- {
- HANDLE hFile;
- hFile=CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
- if (INVALID_HANDLE_VALUE==hFile)
- {
- AfxMessageBox(_T("打开文件失败!"));
- return FALSE;
- }
- DWORD dwOEP,cbRead;
- IMAGE_DOS_HEADER dos_header[sizeof(IMAGE_DOS_HEADER)];//IMAGE_DOS_HEADER dos_header[1];
- if (!ReadFile(hFile,dos_header,sizeof(IMAGE_DOS_HEADER),&cbRead,NULL))
- {
- AfxMessageBox(_T("读取DOS头部失败!"));
- CloseHandle(hFile);
- return FALSE;
- }
- int nEntryPos=dos_header->e_lfanew+40;
- SetFilePointer(hFile,nEntryPos,NULL,FILE_BEGIN);
- if (!ReadFile(hFile,&dwOEP,sizeof(dwOEP),&cbRead,NULL))
- {
- CloseHandle(hFile);
- return FALSE;
- }
- CloseHandle(hFile);
- CString strOEP;
- strOEP.Format(_T("OEP:0x%X"),dwOEP);
- AfxMessageBox(strOEP);
- return TRUE;
- }
2.通过内存映射读取
[cpp] view plain copy
- BOOL ReadOEPByMemory(LPCTSTR szFileName)
- {
- HANDLE hFile;
- HANDLE hMapping;
- PVOID pBaseAddr;
- if ((hFile=CreateFile(szFileName,GENERIC_READ,FILE_SHARE_READ,
- 0,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0))==INVALID_HANDLE_VALUE)
- {
- AfxMessageBox(_T("打开文件失败!"));
- return FALSE;
- }
- //创建内存映射文件
- if (!(hMapping=CreateFileMapping(hFile,0,PAGE_READONLY|SEC_COMMIT,0,0,0)))
- {
- AfxMessageBox(_T("Mapping failed."));
- CloseHandle(hFile);
- return FALSE;
- }
- //把文件映像存入pBaseAddr
- if (!(pBaseAddr=MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0)))
- {
- AfxMessageBox(_T("View Failed."));
- CloseHandle(hMapping);
- CloseHandle(hFile);
- return FALSE;
- }
- IMAGE_DOS_HEADER *dos_header=(IMAGE_DOS_HEADER *)pBaseAddr;
- IMAGE_NT_HEADERS *nt_header=(IMAGE_NT_HEADERS *)((DWORD)pBaseAddr+dos_header->e_lfanew);
- DWORD dwOEP=nt_header->OptionalHeader.AddressOfEntryPoint;
- //清除内存映射和关闭文件
- UnmapViewOfFile(pBaseAddr);
- CloseHandle(hMapping);
- CloseHandle(hFile);
- CString strOEP;
- strOEP.Format(_T("OEP:0x%X"),dwOEP);
- AfxMessageBox(strOEP);
- return TRUE;
- }
第二种方法要注意DOS STUP与PE头不一定是紧挨着的,一定要通过(DWORD)pBaseAddr+dos_header->e_lfanew定位到IMAGE_NT_HEADERS
如果还要读入口点的代码或其它东西,把PAGE_READONLY|SEC_COMMIT换成PAGE_READONLY|SEC_COMMIT|SEC_IMAGE会给你带来很大的便利
谢谢列宁。
两种方法获取文件OEP相关推荐
- python字符串成熟编码_python字符串转公式两种方法获取网页编码python版
在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...
- java文件指针,Java 测试文件指针,java测试指针,两种方法打开文件并进行内
Java 测试文件指针,java测试指针,两种方法打开文件并进行内 两种方法打开文件并进行内容定位package com.ronsoft.books.nio.channels;import java. ...
- python 修改文件创建时间_python 两种方法修改文件的创建时间、修改时间、访问时间...
突如其来想知道一下 python 如何修改文件的属性(创建.修改.访问时间),于是就去网上搜集了可行方案,也就有了这篇博客 方案一 from win32file import CreateFile, ...
- wps word打开是html,用Word打开WPS文件的两种方法,WPS文件如何打开?
方法一 问:请问,怎样才能在word中正常使用wps文件? 答:一般来说,wps打开word文件是比较顺利的,但word打开wps文件时,若设置不对就无法打开.设置的方法是:启动word后,在&quo ...
- 使用五种方法获取文件扩展名
方法一: function get_ext1($path) {return strrchr($path,'.'); } echo get_ext1(__FILE__); 方法二: function g ...
- python比较两个二进制文件_python三种方法判断文件是否为二进制文件
两种方法判断文件是否为二进制文件,最准确的就是把这两种方法结合起来. (1)方法一: 它首先检查文件是否以BOM开始,如果不在初始8192字节内查找零字节: import codecs file_pa ...
- root android oppo,OPPO R9S怎么ROOT oppor9s获取root权限的两种方法
OPPO R9S如何ROOT呢?作为一款最新的OPPO系列智能手机,对于刚入手的用户而言,可能不知该如何获取OPPO R9S手机ROOT权限.下面就与大家分享一下获取OPPO R9S手机ROOT权限的 ...
- android 获取当前时间精确到毫秒的两种方法
1.概述 在android app开发中,在项目中有些功能需求要求要获取当前时间精确到毫秒,已便于完成功能开发的需要,而在android 的系统api中提供了SimpleDateFormat和Cale ...
- 在金蝶云星空中获取单据体信息的两种方法
近日在学习星空产品的时候发现了两种获取单据体数据包方法,然后调试了一下,发现两种方法获取的信息都是一样的,特此记录一下. 第一种: Entity entity = this.View.BillBusi ...
最新文章
- Android TextView 在strings 里面 实现换行
- try-catch-finally中return的执行情况
- C#的委托事件在winform窗体中实现传值备忘
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Menu/Menu的Command)
- Python脚本-批量修改文件名
- 数据结构之求二叉树的所有叶子和以及叶子总数
- Asterisk标准通道变量
- 洛谷P1313 计算系数
- 关于通过ServletContext获取数据出现的http500的错误的解决方案
- Netflix的Hystrix使用教程
- VMware Horizon Client剪贴板异常问题解决
- 发现 nios2-elf-gcc 一处 bug
- mysql 修改字段为主键自增_「MySQL整理」 MySQL语法,如何操作数据表
- JAVA中级(五)response(1)基本介绍,代表响应的类,如何设置响应头,行,体
- 安卓手机快速将IOS微信消息换行
- 在linux中使用getch()函数
- 关于评审--从思想到落地
- windows10系统-11-高效软件
- 光纤布线系统如何打造绿色数据中心?
- [学位]燕山大学中文学术期刊目录(2020修订版)
热门文章
- 基于Hi3559AV100 RFCN实现细节解析
- amp jsp空格 nps_HTML/CSS中的空格处理\_如何保留页面中的空格【转】
- 各种软件过程模型的优缺点、适用范围和各模型显著特点
- CMDB模型设计解析
- 流式细胞仪生物信息学CRO丨Cytapex功能简介
- c语言int保留几位小数,C/C++保留小数位数
- 10.2 自制操作系统: risc-v Supervisor寄存器sscratch/sepc/scause/stval/senvcfg
- visionpro学习课程-CogPMAlignTool大总结
- java商城项目面试题,Java基础视频教程
- 操作系统:I/O控制方式的分类和各自的优缺点及适用场景