【发布时间】:2013-02-14 17:22:34
【问题描述】:
我熟悉一般程序内存布局(即:文本段、数据段、堆、堆栈等),并试图在此处找到类似于描述和图表的内容:
http://www.tenouk.com/Bufferoverflowc/Bufferoverflow1c.html
但是,我试图找出三个不同的案例,每个案例都涉及使用外部库:
- 构建时外部库的静态链接(即:
ldflags中的libtest.a) - 在构建时动态链接外部库(即:
ldflags中的libtest.so) - 在运行时动态链接外部库(即:
ldflags中的libtest.soNOT,但库是通过dlopen()/dlsym()调用加载的)
可以向我解释一下内存布局吗?我对(2) 和(3) 之间的区别(如果有的话)特别感兴趣。
谢谢。
【问题讨论】:
-
在情况 (2) 中,链接仍然发生在链接时,而不是构建时。堆栈和堆区域将在所有三种情况下共享。在情况 (1) 中,库的文本和数据部分将与您的目标文件的文本和数据部分结合在一起。在情况 (2) 和 (3) 中,每个动态链接库都有自己的文本和数据部分,它们可能会被运行时加载器重定位。
-
谢谢。 +1。可惜没有得到答案。投票结束。
标签: memory makefile static-linking dynamic-linking