1. 程式人生 > 其它 >EXE檔案結構及讀取方法

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檔案說明