【问题标题】:Linking/build vernacular/jargon - Dynamic linking methods链接/构建白话/行话 - 动态链接方法
【发布时间】:2013-02-14 17:22:34
【问题描述】:

我熟悉一般程序内存布局(即:文本段、数据段、堆、堆栈等),并试图在此处找到类似于描述和图表的内容:

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

但是,我试图找出三个不同的案例,每个案例都涉及使用外部库:

  1. 构建时外部库的静态链接(即:ldflags 中的 libtest.a
  2. 在构建时动态链接外部库(即:ldflags 中的 libtest.so
  3. 在运行时动态链接外部库(即:ldflags 中的libtest.so NOT,但库是通过dlopen()/dlsym() 调用加载的)

可以向我解释一下内存布局吗?我对(2)(3) 之间的区别(如果有的话)特别感兴趣。

谢谢。

【问题讨论】:

  • 在情况 (2) 中,链接仍然发生在链接时,而不是构建时。堆栈和堆区域将在所有三种情况下共享。在情况 (1) 中,库的文本和数据部分将与您的目标文件的文本和数据部分结合在一起。在情况 (2) 和 (3) 中,每个动态链接库都有自己的文本和数据部分,它们可能会被运行时加载器重定位。
  • 谢谢。 +1。可惜没有得到答案。投票结束。

标签: memory makefile static-linking dynamic-linking


【解决方案1】:

我发现 Solaris 链接器指南(http://docs.oracle.com/cd/E26502_01/html/E26507/index.html)写得非常好,在解释极其复杂的实用程序方面非常有用。

在图表方面,您可能会发现http://docs.oracle.com/cd/E26502_01/html/E26507/chapter6-93046.html#scrolltochttp://docs.oracle.com/cd/E26502_01/html/E26507/chapter6-34713.html#scrolltoc 上的内容会有所帮助。

【讨论】:

  • 谢谢。这很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
相关资源
最近更新 更多