您现在的位置是:首页 > 文章详情

EXE文件结构及读取方法

日期:2018-04-10点击:721

出自 “晓风残月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文件比较特殊,打开方式也有点特殊,需指定格式,见下面代码:

  1. #include<iostream>  
  2. #include<string>  
  3. #include<fstream>  
  4. #include<ios>  
  5. using namespace std;  
  6.   
  7. const int BUFFER_SIZE=1024;  
  8.   
  9. void update(ifstream& in)   
  10. {  
  11.     if (!in)   
  12.     {  
  13.         return;  
  14.     }  
  15.     std::streamsize length;  
  16.     char buffer[BUFFER_SIZE];  
  17.     while (!in.eof())  
  18.     {  
  19.         in.read(buffer, BUFFER_SIZE);  
  20.         length = in.gcount();  
  21.         if (length > 0)   
  22.         {  
  23.             printf(”%s”,buffer);  
  24.         }  
  25.     }  
  26.     in.close();  
  27. }  
  28.   
  29.   
  30. int main()  
  31. {  
  32.     update(ifstream(”1.exe”, ios_base::binary));  
  33.     return 0;  
  34. }  
#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文件说明




原文链接:https://yq.aliyun.com/articles/683214
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章