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....