EXE文件结构及读取方法

一、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;
}

当中,ios_base 是C++标准程序库中的一个类,定义于<ios>头文件里。

ios_base类封装了C++标准中的流输入输出中不依赖于读写的数据的类型的基本信息,如格式化信息、异常状态、事件回调函数等。

关于PE文件的头,能够參考PE文件说明

时间: 2024-10-19 21:10:09

EXE文件结构及读取方法的相关文章

EXE文件结构和读取方法

一.EXE文件概念 EXE File英文全名executable file .译作可运行文件,可移植可运行 (PE) 文件格式的文件,它能够载入到内存中.并由操作系统载入程序运行,是可在操作系统存储空间中浮动定位的可运行程序.如记事本程序notepad.exe ,能够用来编辑文档,如:測试.txt双击打开notepad.exe记事本程序来进行编辑处理. 二.EXE文件结构 EXE文件分为两个部分: EXE文件头和程序本体.exe文件比較复杂,属于一种多段的结构.是DOS最成功和复杂的设计之中的一

05、解剖CEL文件各版本格式和读取方法(非R语言)

相比DAT文件,网络上更支持CEL级别的文件.CEL已经把DAT图像转换成数据了,而且CEL比DAT所占空间小得多.介绍一下CEL文件的格式,CEL文件有文本文件(TextCelFile,版本3).BinaryCelFile(二进制文件,版本4).GenericCelFile(普通文件,版本1)三种. 1)版本3 早期的CEL文件是版本3的,因为是文本文件,所以直接用记事本打开就可以看到里面的内容了,如下是GSM2899.CEL: [CEL] Version=3 [HEADER] Cols=64

C# ASP.NET Webservice调用外部exe无效的解决方法

最近用asp.net做webservice,其中有个功能是调用执行外部的exe(类似cmd中执行),但执行Process.Start之后就没有结果,同样代码在winform下正常,折腾两天终于找到解决方法 本文参考了以下网页,十分感谢 http://bbs.csdn.net/topics/300053869 http://blog.163.com/[email protected]/blog/static/15737970200862331842368/ 环境:win7 sp1 64位 以及II

解决Windows下安装MySQL 5.5,运行MySQLInstanceConfig.exe没有响应的方法

我在Windows Server 2003虚拟机上安装MySQL5.5(社区版).这个虚拟机之前被别人安装过MySQL5.5和MySQL5.0,但是忘了root密码,所以重装.不出意外的遇到了配置MySQL Instance时MySQLInstanceConfig.exe没有响应的问题.(我记得以前遇到这个问题,就果断换了MySQL5.0,绕开却并未解决) 试了很多方法,有说需要以Administrator身份运行(据说WIN7上安装会是这个问题,而我用的是Windows Server 2003

Windows 7 EXE图标丢失修复方法

有过Win7下的一些EXE文件图标莫名奇妙丢失,但功能却正常的情况吗?这是图标缓存的问题,应该是Win7的bug. 在命令提示符下输入下列命令即可恢复. 以下是代码片段: taskkill /im explorer.exe /f  cd /d %userprofile%\appdata\local  del iconcache.db /a  start explorer.exe  exit Windows 7 EXE图标丢失修复方法,布布扣,bubuko.com

把C#程序(含多个Dll)合并成一个Exe的超简单方法

原文:把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超简单的方法,不用写一行代码就可轻松实现. 这里我们需要用到一款名为Costura.Fody的工具.Costura.Fody是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件

WPF程序将DLL嵌入到EXE的两种方法

WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了>可以参看地下地址(两篇是一样的): 开源中国 http://my.oschina.net/chinesedragon/blog/308336 CNBLOGS http://www.cnblogs.com/luoshupeng/p/3946635.html 引言 前几一写了一个小工具----<Vi

Chars74K数据集简介及手写字符子数据集相关读取方法

Chars74K数据集是一个经典的字符识别数据集,主要包括了英文字符与坎那达语(Kannada)字符.数据集一共有74K幅图像,所以叫Chars74K. 英文数据集依据图像采集方式分为三个类别: 1. 自然环境下采集的字符图像数据集: 2. 手写字符图像数据集: 3. 计算机不同字体合成的字符图像数据集. 这里只介绍英文手写字符数据集.该数据集包含了52个字符类别(A-Z,a-z)和10个数字类别(0-9)一共62个类别,3410副图像,由55个志愿者手写完成. 该数据集在EnglishHnd.

nvcc fatal : Cannot find compiler &#39;cl.exe&#39; in PATH解决方法

我在测试安装的deep learning工具theano.按照官网Baby Steps - Algebra一步步输入. >>> import theano.tensor as T >>> from theano import function >>> x = T.dscalar('x') >>> y = T.dscalar('y') >>> z = x + y >>> f = function([x