6——man elf的翻译——重定位条目 (Relocation entries(Rel & Rela))

8 篇文章 0 订阅

    重定位是一种用符号定义连接符号引用的过程。可重定位文件必须拥有描述如何去修改它们section contents的信息,好让
    可执行或共享目标文件保存程序镜像的正确信息。可重定位条目就是这些数据。
    
    重定位结构不需要附加信息:
    
       typedef struct {
       Elf32_Addr r_offset;
       uint32_t   r_info;
       } Elf32_Rel;

       typedef struct {
           Elf64_Addr r_offset;
           uint64_t   r_info;
       } Elf64_Rel;
    
    重定位结构需要附加信息:
    
       typedef struct {
           Elf32_Addr r_offset;
           uint32_t   r_info;
           int32_t    r_addend;
       } Elf32_Rela;

       typedef struct {
           Elf64_Addr r_offset;
           uint64_t   r_info;
           int64_t    r_addend;
       } Elf64_Rela;    
    
    r_offset    保存的是应用重定位操作的偏移量。对于一个重定位文件,这个值是从节开始到受重定位影响的存储单元
                的偏移量。对于一个可执行或共享目标文件,这个值是受重定位影响的存储单元的虚拟地址。
                
    r_info        This member gives both the symbol table index with respect to which the relocation must be 
                made and the type of relocation to apply. 可重定位类型是处理器特性决定的。当text引用了一个
                重定位条目的重定位类型或者符号表索引的时候,这意味着the result of applying ELF[32|64]_R_TYPE
                 or ELF[32|64]_R_SYM,分别地,to the entry's r_info member.
                 
    r_addend    指定了一个附加的常数用来去计算保存在重定位位置的值。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值