EXE文件结构及读取方法
出自 “晓风残月xj” 博客
由于各种原因,可能存在诸多不足,欢迎斧正!
一、EXE文件概念
EXE File英文全名executable file ,译作可执行文件,可移植可执行 (PE) 文件格式的文件,它可以加载到内存中,并由操作系统加载程序执行,是可在操作系统存储空间中浮动定位的可执行程序。如记事本程序notepad.exe ,可以用来编辑文档,如:测试.txt双击打开notepad.exe记事本程序来进行编辑处理。
二、EXE文件结构
EXE文件分为两个部分: EXE文件头和程序本体。exe文件比较复杂,属于一种多段的结构,是DOS最成功和复杂的设计之一。每个exe文件包含一个文件头和一个可重定位程序的映像。文件头包含MS-DOS用于加载程序的信息,例如程序的大小和寄存器的初始值。文件头还指向一个重定位表,该表包含指向程序映像中可重定位段地址的指针链表。MS-DOS通过把该映像直接从文件复制到内存加载exe程序,然后调整定位表中说明的可重定位段地址。定位表是一个重定位指针数组,每个指向程序映像中的可重定位段地址。 预知详细原理与结构,请点击EXE文件结构及原理
上表是EXE文件头
三、EXE文件打开方法
由于EXE文件比较特殊,打开方式也有点特殊,需指定格式,见下面代码:
- #include<iostream>
- #include<string>
- #include<fstream>
- #include<ios>
- using namespace std;
- const int BUFFER_SIZE=1024;
- void update(ifstream& in)
- {
- if (!in)
- {
- return;
- }
- std::streamsize length;
- char buffer[BUFFER_SIZE];
- while (!in.eof())
- {
- in.read(buffer, BUFFER_SIZE);
- length = in.gcount();
- if (length > 0)
- {
- printf(”%s”,buffer);
- }
- }
- in.close();
- }
- int main()
- {
- update(ifstream(”1.exe”, ios_base::binary));
- return 0;
- }
#include<iostream>
include<string>
include<fstream>
include<ios>
using namespace std;
const int BUFFER_SIZE=1024;
void update(ifstream& in)
{
if (!in)
{
return;
}
std::streamsize length;
char buffer[BUFFER_SIZE];
while (!in.eof())
{
in.read(buffer, BUFFER_SIZE);
length = in.gcount();
if (length > 0)
{
printf("%s",buffer);
}
}
in.close();
}
int main()
{
update(ifstream("1.exe", ios_base::binary));
return 0;
}
其中,ios_base 是C++标准程序库中的一个类,定义于<ios>头文件中。ios_base类封装了C++标准中的流输入输出中不依赖于读写的数据的类型的基本信息,如格式化信息、异常状态、事件回调函数等。
关于PE文件的头,可以参考PE文件说明。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JavaScript中的单引号和双引号
JavaScript中的单引号和双引号 今天来聊一聊单引号和双引号在JavaScript中的使用,做web的经常会在HTML中或者JavaScript中拼接字符串,这个时候就会用到单引号与双引号混合使用,如果使用不当还会造成意想不到的bug。 单引号和双引号都可以作为字符串的开始符和关闭符,并且只能同一种单或者双引号来定义开始和结束; 在同一种引号中使用相同的引号,需要转义后才能使用。不同引号可以嵌套使用。 下面就来聊一聊这些小细节。 首先,描述一下,具体的应用场景。 第一:从后台界面传递的数据在HTML或者jsp页面展示的时候,我们可能把这些数据直接展示,又或者以变量的形式传递给js函数。 第二:我们用到ajax的时候,从后端异步获取数据,需要把这些数据结合HTML标签CSS属性拼接在一起,然后斧子给某个标签在页面上展示。 具体来说一些这些应用场景。 第一:在HTML或者Jsp中使用 有一个需求,在后台传递一个List集合的数据将要在前台页面展示 前台页面 我们看onclick="test('${str}')"我们给js函数test()需要传递一个参数,这个时候就需要用到双引号中嵌...
- 下一篇
视频在 H5 游戏中的应用
前言 游戏中如果需要使用一些预先录制好的动画,动画格式可以选择 gif 文件和视频文件,视频文件和 gif 文件相比,size 更小(相同质量,gif 文件比 mp4 文件大5倍以上)。 如果视频能在 canvas 中或者 webgl 中播放,这样视频可以和其它游戏元素整合,实现以前需要很复杂的方式才能实现的功能,比如在一个旋转的 3D 立方体中播放视频。 当前主流的浏览器 chrome,使用 U4 2.0 内核的 app(包括 UC 浏览器,手淘,支付宝,钉钉等)都支持视频在 canvas 中播放。 javascript 实现视频在 canvas 中播放 视频在 canvas 中播放,可以更好地和其它游戏元素整合,主要步骤如下(完整源码参考附件 video_canvas.html): 1.创建后台视频 var video = document
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- Red5直播服务器,属于Java语言的直播服务器
- 2048小游戏-低调大师作品
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装