dos重定位表修改

2021-05-23 00:32:46 字數 640 閱讀 9997

資料:

struct   do***ehead_t //   dos   下   exe   頭檔案格式

; 對於debug版本的可執行檔案,通過dump其debug資訊,我們可以方便的得到其檔案頭資訊,重定位表,符號表等等資訊。

通過ida我們可以看到模擬載入後對應指令處的線性位址等資訊。

有了這些資訊我們如何實施重定位表的修改呢?

1)通過ida檢視需要修改處的線性位址,比如1afb:3e86  call sub_3267

再減去ida載入起始位址(拖到檔案起始處看最小位址,一般為0000:0000或1000:0000兩種),例如此檔案從1000:0000開始載入,則用1afb:3e86 - 1000:0000  = 0afb:3e86 ,這個位址就是我們要在可執行檔案中查詢的位址。

如果搜到多條匹配,則通過上面給出的dos檔案頭資訊,定位屬於重定位表的那條。

3)抹除此資訊。用十六進製制編輯軟體,將此重定位表資訊刪除,然後在重定位表末尾大片的0位元組處新增對應長度的0位元組(一項重定位表資訊4個位元組)。

4)修改檔案頭中重定位表項數。刪除了幾項重定位表,則減去幾。比如此處刪除一項,此處願為2310,則修改為2210即可。

5) 這樣便可修改1afb:3e86  call sub_3267 對應處的位元組內容。

基址重定位表

向程序的虛擬記憶體載入pe檔案 exe dll sys 時,問價會被載入到pe頭的imagebase所指的位址處,若載入的時dll sys 檔案,且在imagebase位置處已經載入了其他dll檔案,那麼pe裝載器就會將其載入到其他未被占用的空間,這就是pe檔案的重定位。ex a.dll被載入到te...

PE 重定位表

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

7 重定位表

一種重定位方法 g dwvar dd call f pop ebx sub ebx,offset b 執行時的 eip減去編譯時的 eip,算出偏移 mov eax,ebx offset g dwvar dll和 fixed no 選項都會產生重定位表 一般會多出乙個.reloc的節 typedef...