【问题标题】:How to determine what is being relocated using readelf如何使用 readelf 确定要重定位的内容
【发布时间】:2018-07-18 17:25:19
【问题描述】:

从下面的sn-p,我可以看到重定位条目是应用在某个section的offset0x000000201018,但是如何确定是哪个section呢?

我的所有部分也都小于这个偏移量。这意味着什么?

搬迁:

Relocation section '.rela.plt' at offset 0x4f8 contains 1 entries:
  Offset          Info           Type           Sym. Value    Sym. Name + Addend
000000201018  000300000007 R_X86_64_JUMP_SLO 0000000000000000 printk + 0

部分标题:

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
...
[ 6] .rela.plt         RELA               00000000000004f8  000004f8
     0000000000000018  0000000000000018   AI       3    21     8
...
[21] .got.plt          PROGBITS           0000000000201000  00001000
     0000000000000020  0000000000000008   WA       0     0     8

【问题讨论】:

    标签: binary elf loader dynamic-loading readelf


    【解决方案1】:

    应用重定位的部分在section headersinfo 字段中指定。从问题中的示例精灵中,重定位部分.rela.plt 适用于部分编号21.got.plt 部分。

    偏移字段对于目标文件和共享目标文件有不同的含义。 “对于可重定位文件,该值是从节开头到受重定位影响的存储单元的字节偏移量。对于可执行文件或共享对象,该值是受重定位影响的存储单元的虚拟地址。”

    来源/更多信息:http://www.skyfree.org/linux/references/ELF_Format.pdf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      相关资源
      最近更新 更多