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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM