一種重定位方法:
g_dwvar dd ?
call @f
pop ebx
sub ebx, offset @b ;執行時的
eip減去編譯時的
eip,算出偏移
mov eax, [ebx + offset g_dwvar]
/dll和
/fixed:no
選項都會產生重定位表
,一般會多出乙個.reloc的節
typedef struct _image_base_relocation image_base_relocation;
下圖中是dll檔案的
重定位表,virtualaddress為1000h,sizeofblock為10,typeoffset陣列分別為3003,
3008
,3064
,0000,高4
位表示image_rel_based_highlow,最後乙個0000用來
4位元組對齊。
實際要重定位的位址分別是10001003,
10001008
,10001064
。可以看出只有分頁位址為
1000h
的地方要修。
再去看看10001003,
10001008
,10001064
裡是什麼,前兩個是字串位址,最後乙個是
iat中的乙個項,確實需要修。可以發現命中在重定位表中的資料,偵錯程式會加上下劃線。
基址重定位表
向程序的虛擬記憶體載入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,而...
dos重定位表修改
資料 struct do ehead t dos 下 exe 頭檔案格式 對於debug版本的可執行檔案,通過dump其debug資訊,我們可以方便的得到其檔案頭資訊,重定位表,符號表等等資訊。通過ida我們可以看到模擬載入後對應指令處的線性位址等資訊。有了這些資訊我們如何實施重定位表的修改呢?1 ...