分析exe文件结构

分析exe文件结构

转自: http://blog.csdn.net/xiaofengcanyuexj/article/details/37697577


一、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文件比较特殊,打开方式也有点特殊,需指定格式,见下面代码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  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. }  

       其中,ios_base 是C++标准程序库中的一个类,定义于<iOS>头文件中。ios_base类封装了C++标准中的流输入输出中不依赖于读写的数据的类型的基本信息,如格式化信息、异常状态、事件回调函数等。

  

     关于PE文件的头,可以参考PE文件说明


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值