我的问题与ELF中的符号有关。正如我们所知,ELF的符号表保存了定位和重定位程序的符号定义和引用所需的信息。
我的问题是,我们能否区分库符号和用户定义的符号(如果两者都是全局的)?考虑这样一种场景:没有可用的源代码,只有ELF。
发布于 2011-10-07 14:49:44
静态库只是未链接的目标文件(.o)的归档文件(带有索引以加快链接器在其中搜索符号的速度)。当您链接到这样的库时,链接器获取每个未解析的符号并尝试在那里找到它。如果找到它,它会提取相应的对象,并将其添加到集合中以进行链接。所以不,你不能判断是否来自于静态库。
如果您有一个与可执行文件所链接的库足够接近的库实例,则可以查看它定义了哪些符号,然后假设所有这些符号以及它们所依赖的任何符号都来自于该库。
当然,也可以区分在共享库中定义的符号,因为它仍然是不同的文件。
但还有另一点:提供没有与libc静态链接的源代码的Linux二进制文件最有可能是非法的。也就是说,如果libc是GNU Libc,那么它肯定是非法,因为它是在LGPL的条款下分发的,而且LGPL需要提供(根据请求)所有派生代码的源代码,动态链接到它的代码除外。如果它使用不同的libc,比如sourceware newlib或仿生libc (Android) (我找不到其他的)。但是,我不确定这些代码在基于GNU libc的系统中会工作得多好。
https://stackoverflow.com/questions/7683630
复制相似问题