V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
byaiu
V2EX  ›  Linux

ELF 文件格式中信息冗余问题(符号表与重定位项)

  •  
  •   byaiu · 2018-03-23 23:44:08 +08:00 · 3436 次点击
    这是一个创建于 2197 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ELF 文件中符号表的每一项都有一个st_value可以表示该符号在所在段的偏移量。

    重定位项的r_offset所表示的也是符号所在段的偏移量;而重定位项里的r_info里也包含了对符号表里某个符号的引用。

    这样一来,st_valuer_offset是不是就是相同信息的两次表述了?

    4 条回复    2018-03-25 15:13:45 +08:00
    tomychen
        1
    tomychen  
       2018-03-24 11:32:50 +08:00
    st_value; /* Value of the symbol */

    r_offset; /* Location at which to apply the action */
    r_info; /* index and type of relocation */

    我觉得应该从功能上去区分,而不是从“值”上去区分。
    byaiu
        2
    byaiu  
    OP
       2018-03-24 23:38:07 +08:00
    @tomychen

    我后来想到了这么一个理由:

    这两者的信息确实是重复的,但是重定位表所在的 section 会一直存在,而符号表所在的 section 有可能会被 strip 掉。

    系统里安装的各种 so 都是 strip 之后的(少了.symtab 和.strtab ),应用程序在加载的时候会从重定位表(.dynsym )去寻找符号。一般来说自己定义的函数和用到的外部函数引用也会在.dynsym 里。
    byaiu
        3
    byaiu  
    OP
       2018-03-25 07:21:01 +08:00 via Android
    @tomychen 我上个回答还是不对…

    文不对题
    tomychen
        4
    tomychen  
       2018-03-25 15:13:45 +08:00
    其实我想说的是,这几个东西的“作用”并不是重复的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1391 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:41 · PVG 07:41 · LAX 16:41 · JFK 19:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.