Я знаком с общей макетом памяти программы (например, текстовым сегментом, сегментом данных, кучей, стекю и т. Д.) И пытаюсь найти что-то похожее на описание и диаграммы здесь:Linking/build vernacular/jargon - Методы динамической компоновки
http://www.tenouk.com/Bufferoverflowc/Bufferoverflow1c.html
Однако я пытаюсь выяснить три различных случая, каждый из которых включал использование внешних библиотек:
- Статическое связывание внешней библиотеки во время сборки (т.е.
libtest.a
вldflags
) - Динамическая связь внешней библиотеки во время сборки (т.е.
libtest.so
вldflags
) - Динамическая связь внешней библиотеки во время выполнения (например:
libtest.so
НЕ вldflags
, но библиотека загружается черезdlopen()
/dlsym()
)
Может ли кто-нибудь более знакомый с этим объяснить расположение памяти для меня? Меня особенно интересует различие, если оно есть, между случаями (2)
и (3)
.
спасибо.
В случае (2) связь все еще происходит во время соединения, а не времени сборки. Стек (ы) и куча (и) кучи будут распределены для всех трех случаев. В случае (1) разделы текста и данных библиотеки будут объединены с разделами ваших объектных файлов. В случаях (2) и (3) каждая динамически связанная библиотека будет иметь свои собственные разделы текста и данных, которые могут быть перемещены загрузчиком во время выполнения. – jerry
Спасибо. +1. Жаль, что это был не ответ. Голосование закрывается. – DevNull