PE加載重定位

2021-07-30 05:00:57 字數 1313 閱讀 9192

pe exe檔案載入有時候會重定位,主要是因為 fileheader中的乙個字段 

characteristics

這個域描述pe檔案的一些屬性資訊,比如是否可執行,是否是乙個動態連線庫等.具體定義如下:

#define image_file_relocs_stripped           0x0001  // 重定位資訊被移除,檔案必須載入先前的基位址

#define image_file_executable_image         0x0002  // 檔案可執行

#define image_file_line_nums_stripped      

0x0004  // 行號被移除

#define image_file_local_syms_stripped       0x0008  // 符號被移除

#define image_file_aggresive_ws_trim         0x0010  // agressively trim working set

#define image_file_large_address_aware      0x0020  // 程式能處理大於2g的位址

#define image_file_bytes_reversed_lo        0x0080  // bytes of machine word are reversed.

#define image_file_32bit_machine          

0x0100  // 32位機器

#define image_file_debug_stripped            0x0200  // .dbg檔案的除錯資訊被移除

#define image_file_removable_run_from_swap  0x0400  // 如果在移動介質中,拷到交換檔案中執行

#define image_file_net_run_from_swap         0x0800  // 如果在網路中,拷到交換檔案中執行

#define image_file_system                    0x1000  // 系統檔案

#define image_file_dll                      0x2000  // 檔案是乙個dll

#define image_file_up_system_only            0x4000  // 檔案只能執行在單處理器上

#define image_file_bytes_reversed_hi         0x8000  // bytes of machine word are reversed.

載入PE檔案 PE載入器模擬法

1 找到檔案載入到記憶體的基址 通常為0x0040 0000 2 取得記憶體對齊粒度 3 載入pe頭,按照記憶體對齊粒度讀取到指定起始位址的記憶體處 4 載入各個節。得到節數目,定位節表,按照記憶體對齊粒度讀取到記憶體,不足的用0填充。5 基址不對,需要重定位修復。include stdafx.h ...

PE 重定位表

參考文章 重定位表 relocation table 用於在程式載入到記憶體中時,進行記憶體位址的修正。為什麼要進行記憶體位址的修正?我們舉個例子來說 test.exe可執行程式需要三個動態鏈結庫dll a.dll,b.dll,c.dll 假設test.exe的imagebase為400000h,而...

el table 懶載入重置載入狀態

由於業務需求,大量的上下級關係管理,使用了el tale樹形懶載入,但使用過程 現了以下三個問題 1.刪除時 沒有更新子級的數量 2.新增時也沒有載入新的資料 3.使用this.set this.refs.tabable.store.states.lazytreenodemap,this.form....