两种方法获取文件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 ...
最新文章
- 男性护肤热潮难以孕育下一个“完美日记”?
- vue生命周期大白话篇
- Spring中Bean的生命周期是怎样的?
- eclipse 代码提示后面的百分比是什么意思?
- ashly理器4.8软件汉化版_AMD 处理器核心比英特尔多还更便宜?英特尔回应
- C语言bmp文件隐藏,怪事!!关于读bmp文件!
- 学生成绩管理系统——JAVA
- c语言运算程序示例,C语言算术运算示例程序
- vs2010格式化html,VS中的快捷键快速格式化代码,使好看,整齐
- Python基础-Python中列表的使用
- iOS高仿微信完整源码,网易爱玩APP源码等
- 【总结】python sklearn模型中random_state参数的意义
- 字符串的方法练习------Python篇
- 三星程序员晒源码泄露机密
- 超融合里的服务器怎么复制文件,整整齐齐的超融合机柜,美好!
- 网络运维经理新选择:不再做时间的奴隶
- HTML小米英雄区的分类,《王者荣耀》英雄分类介绍 六种类型各有奇效
- github前端插件大全
- arcgis网络分析最短距离_ArcGIS网络分析(最短路径问题分析)
- 一分钟学会canvas镂空文本小动画
热门文章
- 游戏脚本在移动游戏设计中的作用_关卡设计师谈游戏中的敌对角色设计Monster Design...
- struts2.5.2的套路
- [Revit二次开发] 创建一个柱的族
- Z-Wave 抓包工具使用说明
- Dreamweaver cs6中文版完整安装步骤:
- [量化-005]券商股是一切行情的风向标
- mjpg-streamer-r63 交叉编译成功 RT5350
- redis的安装使用
- [升级版]支付宝扫码付款直接到银行卡最新教程, 自动填写卡号
- Self-Attention for CodeSearch