2013-02-14 72 views
2

我熟悉一般的程序內存佈局(例如:文本段,數據段,堆,堆棧等),並且試圖找到類似於描述和圖表的東西在這裏:鏈接/構建白話/行話 - 動態鏈接方法

http://www.tenouk.com/Bufferoverflowc/Bufferoverflow1c.html

不過,我試圖找出三種不同的情況下,每個涉及使用外部庫:

  1. 在構建時的外部庫的靜態鏈接(即: libtest.aldflags
  2. 在構建時的外部庫的動態連接(即:libtest.soldflags
  3. 動態外部庫在運行時聯動(即:libtest.soNOT在ldflags,但庫經由dlopen()加載/ dlsym()來電)

有人可以更熟悉這個解釋內存佈局給我嗎?我特別感興趣的是(2)(3)之間的區別(如果有的話)。

謝謝。

+1

在情況(2)中,鏈接仍然發生在鏈接時間,而不是構建時間。所有三種情況都將共享堆棧和堆場。在情況(1)中,庫的文本和數據部分將與您的目標文件的文本和數據部分相結合。在情況(2)和(3)中,每個動態鏈接的庫將具有它自己的文本和數據部分,這些部分可以由運行時加載器重定位。 – jerry 2013-05-30 20:53:54

+0

謝謝。 +1。太糟糕了,這不是一個答案。投票結束。 – DevNull 2013-10-16 20:12:45

回答