Search code examples
binaryelfloaderdynamic-loadingreadelf

How to determine what is being relocated using readelf


From the snippet below, I can see that the relocation entry is to be applied at offset 0x000000201018 of some section, but how can I determine what section?

Also all of my sections are smaller than this offset. What are the implications of this?

Relocations:

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:

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

Solution

  • The section to which the relocation is applied is specified in the info field of the section headers. From the example elf in the question, the relocation section .rela.plt applies to section number 21, the .got.plt section.

    The offset field has different meaning for object file and shared object file. "For a relocatable file, the value is the byte offset from the beginning of the section to the storage unit affected by the relocation. For an executable file or a shared object, the value is the virtual address of the storage unit affected by the relocation."

    Source/More Info: http://www.skyfree.org/linux/references/ELF_Format.pdf