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檔案說明。
相關文章
- Android讀取配置檔案的方法Android
- 取證中exe檔案的分析
- python讀取yaml配置檔案的方法PythonYAML
- python檔案讀取 readlines()方法之坑Python
- 用 PHP 讀取檔案的正確方法PHP
- Python實用方法之讀取本地檔案Python
- python讀取大檔案的幾種方法Python
- 任意檔案讀取
- Java 讀取檔案Java
- Yaml檔案語法及讀寫小結YAML
- python讀取檔案指定行的三種方法Python
- Python逐行讀取檔案常用的三種方法!Python
- SpringBoot--SpringBoot 讀取Properties檔案(結合JDBC)Spring BootJDBC
- go配置檔案讀取Go
- python讀取大檔案Python
- springboot讀取配置檔案Spring Boot
- 用友任意檔案讀取
- viper 讀取配置檔案
- matlab讀取npy檔案Matlab
- python小白檔案讀取Python
- cocos讀取plist檔案
- python 讀取文字檔案Python
- IOC - 讀取配置檔案
- 前端讀取excel檔案前端Excel
- shell讀取構建檔案資訊生成json字串JSON字串
- python程式碼讀取遠端檔案的方法--paramikoPython
- 圖解gzip壓縮檔案底層結構及檔案損壞的修復方法圖解
- 任意檔案讀取與下載的原理及修復
- 類檔案結構_class類檔案的的結構
- Android Manifest.xml檔案的結構及作用AndroidXML
- 讀取檔案流並寫入檔案流
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- python中讀取檔案的read、readline、readlines方法區別Python
- Python最常用的讀取指定路徑檔案的方法!Python
- Python將py檔案編譯為exe的方法Python編譯
- java中讀取配置檔案Java
- go–讀取檔案的方式Go
- C#讀取Xml檔案C#XML