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文件说明



  • 相关阅读:
    HDU2059(龟兔赛跑)
    pat 1012 The Best Rank
    pat 1010 Radix
    pat 1007 Maximum Subsequence Sum
    pat 1005 Sign In and Sign Out
    pat 1005 Spell It Right
    pat 1004 Counting Leaves
    1003 Emergency
    第7章 输入/输出系统
    第六章 总线
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4590184.html
Copyright © 2011-2022 走看看