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

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


相關推薦

EXE檔案結構讀取方法

由於各種原因,可能存在諸多不足,歡迎斧正! 一、EXE檔案概念      EXE File英文全名executable file ,譯作可執行檔案,可移植可執行 (PE) 檔案格式的檔案,它可以

檔案結構存取方法

在直接存取裝置上,檔案的物理結構還有一種組織方式,即採用定址結構。在這種方式中,把記錄中的關鍵碼通過某種計算,轉換為記錄的相應地址。這種儲存結構是通過指定記錄在儲存介質上的位置進行直接存取的,記錄無所謂次序。一般來說,用於地址的總數比可能的關鍵碼總數要少得多,所以不會出現一一對應關係。那麼就有可能存在著不同的

Linux下的檔案結構,對應資料夾的作用

/bin 二進位制可執行命令  /dev 裝置特殊檔案  /etc 系統管理和配置檔案  /etc/rc.d 啟動的配置檔案和指令碼  /home 使用者主目錄的基點,比如使用者user的主目錄就是/home/user,可以用~user表示  /li

分享一個給exe檔案加殼的方法

目錄 1.Virbox Protector 介紹 快速加密方案,不需要編寫任何程式碼—快速加密 加殼強度與程式執行效能不再衝突—智慧分析 程式碼虛擬化、高階混淆和其它傳統加密策略—加密策略 碎片程式碼執行,讓破解者無從下手—碎片程式碼 反黑引擎,賦予軟體主動防禦破解的能力—反

WordPress 主題檔案結構執行

開啟一個 WordPress 主題資料夾,它可能包括以下檔案: WordPress 自帶主題 twentysixteen 的檔案構成 從檔名字我們也可以推斷出其大致作用,就這個主題而言,從上至下,它們的作用分別是: css(資料夾):存放 css 檔案

linux下vi/vim開啟檔案異常處理方法

用vi/vim開啟之前寫過的c程式碼,會多次出現這個狀況:    網易有道詞典翻譯如下: 檔案 編輯 檢視 搜尋 終端 幫助 E325:注意 找到一個名為“.mybash.c.swp”的交換檔案 業主:fr 日期:2018年11月11日11:31:55

pandas 讀取csv檔案讀取指定行 讀取csv大檔案分塊讀取方法

    當用pandas的read_csv函式或者是read_table函式讀取檔案時,如果遇到大的檔案,需要分塊讀取,在這個基礎上可以 讀取指定行,比如讀取標籤全為0的行。 程式碼如下: f

linux檔案結構目錄功能

/boot 開機載入程式 /dev 裝置檔案 /etc 配置檔案     /etc/rc 系統初始化目錄,/etc/passwd 使用者資訊檔案  /etc/shadow使用者密碼資訊    /etc/hosts   

linux下生成圖片檔案列表讀取

一個很簡單的sh檔案就可以搞定 listfilepath=list.txt filepath=./sampledata/ find $filepath -name *.png > $listfilepath 然後在windows下就是使用.bat批處理檔案來進行

C#中讀取pdm檔案資訊(PowerDesigner讀取方法)

其實PowerDesigner的pdm檔案是一個xml檔案來的,我們可以當作讀取xml檔案一樣的方式來讀pdm檔案。 其中,我們需要注意的是:如果我們不使用名稱空間管理器的話,系統會提示如下錯誤: 需要名稱空間管理器或 XsltContext。此查詢具有字首、變數或使用者定義的函式。  說明: 執行當前

Android Values檔案作用使用方法

Android valuses 位於app/res/values檔案是用來存放安卓資源的資源的檔案其中包括四個個XML檔案: 1. colors.xml 儲存顏色資源 例如: <resources> <!-- Bas

win7系統下epub檔案格式開啟方法

    最近有win7系統使用者提到一個問題即epub是什麼格式檔案、要怎樣開啟epub格式檔案,其實ePub是一個自由的開放標準,屬於一種可以“自動重新編排”的內容,也就是文字內容可以根據閱讀裝置的特性,以最適於閱讀的方式顯示。下面小編就來說說有關epub檔案的格式以及如何開啟的方法。有興趣的使用者可以參考

ASP .NET MVC4 專案檔案結構檔案的作用

    本文建立專案環境為Visual Studio 2010 + ASP .NET MVC4,專案為MVC4框架自帶的示例專案,其中包含Home、About、Contact、登入等頁面,建立專案會自動新增一些檔案和資料夾,Internet應用程式模板建立完預設有8個頂級目

Java對大檔案的高效讀取方法

1、檔案流   現在讓我們看下這種解決方案——我們將使用java.util.Scanner類掃描檔案的內容,一行一行連續地讀取: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 FileInputS

jvm學習筆記(三)類檔案結構、java方法數65535上限的原因

瞭解class類檔案結構,對於學習smali也是有必要的!一、class類檔案的結構(8位位元組,一個位元組佔8位,以位元組為基礎單位的二進位制流)儲存結構:class檔案是一組以位元組(8位)為基礎單位的二進位制流,各資料嚴格按照順序緊湊排列在class檔案中,中間沒有任何

MP3檔案結構解碼概述

在編碼過程中進行IMDCT變換時,針對不同訊號為同時得到較好的時域和頻域解析度定義了兩種不同的塊長:長塊的塊長為18個樣本,短塊的塊長為6個樣本。這使得長塊對於平穩的聲音訊號可以得到更高的頻率解析度,而短塊對跳變訊號可以得到更高的時域解析度。由於在短塊模式下,3個短塊代替1個長塊,而短塊的大小恰好是一個長塊的

Java class 檔案結構解析

java檔案經過編譯之後就可以形成class檔案。簡而言之,java檔案是我們自己書寫的檔案,也是給我們看的,而class檔案則是給VM看的。但是我們用notepad檢視class檔案時,卻發現那是一串二進位制的檔案。那麼class檔案到底是些啥東西呢? 本質

MFC 生成 exe檔案的圖示更改方法

建立或開啟工程Icon(以下都以工程名為Icon為例)。           單擊Workspace視窗的ResourceView標籤,選中資源ID為IDR_MAINFRAME圖示資源,然後按Delete鍵把它刪除掉。注意:一定要把它刪除才行。           從De

Java虛擬機器(四):Class檔案結構位元組碼指令

    接下來的兩個位元組為this_class項,它是一個對常量池的索引。在this_class位置的常量池入口必須為CONSTANT_Class_info表。該表由兩個部分組成——標籤和name_index。標籤部分是一個具有CONSTANT_Class值的常量,在name_index位置的常量池入口為一

MP3檔案結構編解碼流程

  AGENDA     * MP3簡介     * MP3檔案結構        ——Tag_v2(ID3v2)標籤幀        ——資料幀        ——Tag_v1(ID3v1)標籤幀     *MP3編解碼流程     *MP3檔案的播放流程 一、MP3簡介: