EXE檔案結構及讀取方法
出自 “曉風殘月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檔案比較特殊,開啟方式也有點特殊,需指定格式,見下面程式碼:
- #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;
- }
#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檔案說明。
相關文章
- ccc.exe檔案及ccc.exe病毒清除方法
- 讀取檔案方法大全
- 將WAV檔案做到EXE檔案的方法及注意事項 (轉)
- 取證中exe檔案的分析
- Android讀取配置檔案的方法Android
- 用 PHP 讀取檔案的正確方法PHP
- 用C#讀取txt檔案的方法C#
- python讀取yaml配置檔案的方法PythonYAML
- c# 獲取應用程式exe檔案路徑及退出應用程式的幾種方法C#
- Java 讀取檔案Java
- tiff檔案讀取
- Yaml檔案語法及讀寫小結YAML
- Python實用方法之讀取本地檔案Python
- python讀取大檔案的幾種方法Python
- bash shell 讀取引數檔案常見方法
- Shell程式設計-檔案讀取方法集錦程式設計
- python讀取檔案——python讀取和儲存mat檔案Python
- 利用IDEA和exe4j生成exe檔案及資原始檔和so、dll檔案的放置Idea
- shell讀取構建檔案資訊生成json字串JSON字串
- SAP HANA 系統檔案結構及命令
- viper 讀取配置檔案
- go配置檔案讀取Go
- iOS讀取.csv檔案iOS
- php 讀取超大檔案PHP
- JAVA 讀取xml檔案JavaXML
- WinForm讀取Excel檔案ORMExcel
- java讀取properties檔案Java
- 用友任意檔案讀取
- VB讀取文字檔案的例子:逐行讀取
- Python逐行讀取檔案常用的三種方法!Python
- C#讀取資料夾特定檔案的方法C#
- PB讀取Excel檔案內容的方法(轉帖)Excel
- 讀取檔案迴圈處理的兩種方法
- python讀取檔案指定行的三種方法Python
- 圖解gzip壓縮檔案底層結構及檔案損壞的修復方法圖解
- 用php讀取elf結構PHP
- 讀取SQL Server 表結構SQLServer
- 類檔案結構_class類檔案的的結構