我熟悉一般的程序內存佈局(例如:文本段,數據段,堆,堆棧等),並且試圖找到類似於描述和圖表的東西在這裏:鏈接/構建白話/行話 - 動態鏈接方法
http://www.tenouk.com/Bufferoverflowc/Bufferoverflow1c.html
不過,我試圖找出三種不同的情況下,每個涉及使用外部庫:
- 在構建時的外部庫的靜態鏈接(即:
libtest.a
在ldflags
) - 在構建時的外部庫的動態連接(即:
libtest.so
在ldflags
) - 動態外部庫在運行時聯動(即:
libtest.so
NOT在ldflags
,但庫經由dlopen()
加載/dlsym()
來電)
有人可以更熟悉這個解釋內存佈局給我嗎?我特別感興趣的是(2)
和(3)
之間的區別(如果有的話)。
謝謝。
在情況(2)中,鏈接仍然發生在鏈接時間,而不是構建時間。所有三種情況都將共享堆棧和堆場。在情況(1)中,庫的文本和數據部分將與您的目標文件的文本和數據部分相結合。在情況(2)和(3)中,每個動態鏈接的庫將具有它自己的文本和數據部分,這些部分可以由運行時加載器重定位。 – jerry 2013-05-30 20:53:54
謝謝。 +1。太糟糕了,這不是一個答案。投票結束。 – DevNull 2013-10-16 20:12:45