zoukankan      html  css  js  c++  java
  • 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文件说明



  • 相关阅读:
    Android在layout xml中使用include完成静态加载
    ImageSwitch图像切换控件
    合并石子大总结
    子矩阵(暴搜(全排列)+DP)
    回路(一笔画问题)
    道路重建(记忆化搜索+贪心)
    【NOIP2013 普及组】车站分级
    UML的基本关联
    Matlab画图-非常具体,非常全面
    面向对象程序设计与面向过程程序设计解析
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4590184.html
Copyright © 2011-2022 走看看