EXE檔案結構及讀取方法

大囚長發表於2018-04-11

出自 “曉風殘月xj” 部落格

由於各種原因,可能存在諸多不足,歡迎斧正!

一、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檔案比較特殊,開啟方式也有點特殊,需指定格式,見下面程式碼:

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




相關文章