2017-02-23 83 views
-1

當我們從存儲器(MODULE/Process)轉儲PE時,爲什麼不執行未映射?爲什麼我們需要取消映射才能成爲PE文件有效?

PE在內存中發生了哪些變化,使其無法直接執行?

+1

很難猜測「不執行」可能意味着什麼。卸載一個DLL,但仍然對導入的DLL函數進行生命調用是一個非常常見的錯誤。幸運的是,如果它產生了一個AVE,如果發佈的地址空間被另一個DLL重用,這真是糟糕的一天。 –

+0

「內存轉儲」是什麼意思?雖然它已經在執行,或者您只是加載並映射它,並在第一條指令開始之前將其轉儲?有很大區別... – Devolus

回答

0

映射在執行之前是必需的,因爲您無法預知內存中每個DLL和其他資源的地址,以及程序中動態分配內存的地址。 PE文件頭告訴操作系統如何分配.text.data內存段。

回到80年代和90年代初,你可以回憶.COM文件。這些被複制並執行的內存副本(%EIP指向它的地址)是筆直的,因爲那裏限制了.text數據的64kb。

+1

這與64Kb限制無關。映射是需要的,因爲在早期,大多數代碼並不是獨立的,因此不能在不破壞它的情況下將其加載到任意地址。 – Devolus

+0

感謝您的詳細信息。 –

相關問題