gpt4 book ai didi

linux - 什么是 gcc 共享库的 .sa 文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:28 33 4
gpt4 key购买 nike

我在http://www.linuxjournal.com/article/1052看到一篇文章它指定的位置:

“共享库由两个基本部分组成: stub 和镜像。 stub 库的扩展名为 .sa。 stub 是可执行文件将链接到的库。”

但另一个引用 http://www.faqs.org/docs/Linux-HOWTO/GCC-HOWTO.html它说

“共享库文件(.sa 用于 a.out,.so 用于 ELF)” - 我理解为 .sa 是与 a.out 一起使用的共享库.out格式,.so是配合最新的ELF格式使用。

由于此处不够清晰,我在这里提出问题 - 什么是 .sa 文件? stub 有什么用?

最佳答案

那篇文章很旧(1995 年)并且仍在处理 pre-ELF(所谓的 a.out)共享库。

我忘记了细节,但在那个史前时代,a.out 共享库不是位置独立的,所以每个进程都必须 - 例如 - 加载 libc使用 uselib(2) 在同一个地方共享库系统调用 - 今天已经过时了 - (今天两个不同的进程将 mmap(2) 它作为一个共享的 ELF 对象,在不同的地址)。 .sa 文件也需要这个固定位置的约定。正因为如此,制作共享库真的是一场噩梦:它们占用的固定地址段 [s] 是为整个系统或发行版按惯例定义的!

但你真的不应该关心 2012 年的今天,除非你对历史感兴趣(然后你必须挖掘一些可能很难找到的旧历史文献)。所有发行版,甚至是一些非常古老的发行版(例如 2004 年以来的发行版),都在使用 ELF 格式,该格式使每个进程都可以根据需要mmap其共享库。

今天用/proc/1234/maps/proc/1234/smaps探索pid 1234进程的内存映射,可以轻松理解ELF 共享对象被映射到不同的地方。另请阅读 ASLR

关于linux - 什么是 gcc 共享库的 .sa 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8876231/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com