2012-03-14 75 views
0

據說有時加載程序將加載的exe加載到與鏈接程序假定的地址不同的地址。什麼都可能是加載程序這樣的情況?爲什麼加載程序不能加載到所需的位置

+1

你試圖解決什麼問題? – 2012-03-14 08:53:36

+0

我在想,如果加載程序在某些不受歡迎的位置加載文件的情況很少,那麼也許我可以使用.reloc節來實現其他目的... – user1232138 2012-03-14 09:07:49

+1

我不會推薦,不會。 Win32 PE EXE文件當前沒有重定位(與DLL不同),但我不推薦將隨機信息存儲在'.reloc'部分,這是因爲。 – 2012-03-14 09:10:31

回答

2

基本上,這發生在以下情況下:

  1. 在其中圖像傾向於被加載已經被佔用的地址。例如,可能有另一個圖像已經加載在那裏。
  2. 要加載的圖像已編譯爲ASLR已啓用。
  3. 已設置全局標誌FLG_LDR_TOP_DOWN,這會強制模塊在最高可能的地址加載。
+0

在「全局標誌編輯器」(又名GFLAGS.exe)工具中使用的FLG_LDR_TOP_DOWN通常不安裝在客戶機器上。此外,該工具僅用於x64診斷。 – mox 2012-03-14 14:31:33

+0

如果它不是非ASLRed和非TOP_DOWN,則加載器將不會在錯誤的地址加載EXE,因爲EXE是其地址空間中存在的第一件事(即在ntdll和堆之前)。如果EXE具有無效的用戶模式地址,則在這種情況下進程將無法啓動,因此EXE將始終獲得它最喜歡的地址,但不會使用ASLR而不使用TOP_DOWN。 – SecurityMatt 2012-03-30 00:37:12

相關問題