2012-03-01 92 views
1

將二進制可執行文件加載到內存中時,可以使用十六進制編輯器和彙編代碼中的符號對其進行反彙編甚至查看。這些總是以像0x804這樣的東西開始的......我認爲它是程序存儲器部分。但是我的問題是,由於這些地址不是從程序開始的偏移量,所以二進制程序如何知道它將被加載到內存中的位置?二進制可執行文件如何知道它在內存中的位置?

+0

目前尚不清楚你在問什麼。你在問一個正在運行的可執行文件如何確定它在內存中的位置?如果是這樣,爲什麼需要知道?另外,您是否正在考慮一些特定的平臺?請參閱本文檔的[裝載程序]部分(http://www.iecc.com/linker/linker08.html)。 – 2012-03-01 00:25:38

+0

我更多地詢問程序中的地址是如何準確的。一個程序並不總是能夠被加載到相同的位置,所以這些地址如何指向正確的東西。 – Jumhyn 2012-03-01 00:34:37

+0

是的,它可以。 http://en.wikipedia.org/wiki/Paging – 2012-03-01 00:38:23

回答

0

可執行文件通常有一個標題,其中一個字段是加載地址。

+0

但文件不能*總是*被加載到相同的位置,可以嗎? – Jumhyn 2012-03-01 00:34:55

+0

在Windows上,EXE的默認加載位置是0x400000,EXE始終可用,除了預裝載的系統DLL具有(其他)固定位置以外,始終是首先加載進程的EXE。 – 2012-03-01 00:42:19

+0

@Jhhyn什麼可以展示一個可執行文件被加載在相同的位置?你是對的圖書館 - 該位置可以用於其他事情。但對於可執行文件,您正在爲新的可執行文件創建一個新的地址空間,因此它全部免費開始。 – 2012-03-01 01:10:11

相關問題