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