可能重复:
共享库地址空间
我对执行期间共享库的内存布局感到有些困惑。说一下我理解的吧。
.so 文件是每个二进制文件中不重复代码的文件,因此存在单个副本。二进制文件将更新 GOT 和其他表,并使用这些函数。
虽然我试图了解如何;我得到了以下链接http://www.openbsd.org/papers/nycbsdcon08-pie/mgp00010.html。现在,如果您看到这一点,所有共享库都“映射”到进程内存。这很明显,因为它必须在自己的内存空间中。
如果我们有一个 BSS/Data 部分,则必须在进程之间复制它,因为它将特定于进程。.TEXT 部分会发生什么?它会在运行时被复制还是在某个地方加载,并且每个二进制文件都会将其映射到自己的用户空间中?