首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ELF中的库符号和用户符号

ELF中的库符号和用户符号
EN

Stack Overflow用户
提问于 2011-10-07 14:11:16
回答 1查看 488关注 0票数 0

我的问题与ELF中的符号有关。正如我们所知,ELF的符号表保存了定位和重定位程序的符号定义和引用所需的信息。

我的问题是,我们能否区分库符号和用户定义的符号(如果两者都是全局的)?考虑这样一种场景:没有可用的源代码,只有ELF。

EN

回答 1

Stack Overflow用户

发布于 2011-10-07 14:49:44

静态库只是未链接的目标文件(.o)的归档文件(带有索引以加快链接器在其中搜索符号的速度)。当您链接到这样的库时,链接器获取每个未解析的符号并尝试在那里找到它。如果找到它,它会提取相应的对象,并将其添加到集合中以进行链接。所以不,你不能判断是否来自于静态库

如果您有一个与可执行文件所链接的库足够接近的库实例,则可以查看它定义了哪些符号,然后假设所有这些符号以及它们所依赖的任何符号都来自于该库。

当然,也可以区分在共享库中定义的符号,因为它仍然是不同的文件。

但还有另一点:提供没有与libc静态链接的源代码的Linux二进制文件最有可能是非法的。也就是说,如果libc是GNU Libc,那么它肯定是非法,因为它是在LGPL的条款下分发的,而且LGPL需要提供(根据请求)所有派生代码的源代码,动态链接到它的代码除外。如果它使用不同的libc,比如sourceware newlib或仿生libc (Android) (我找不到其他的)。但是,我不确定这些代码在基于GNU libc的系统中会工作得多好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7683630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档