#-------------------------------------------------------------------------------
# elftools example: elf_relocations.py
#
# An example of obtaining a relocation section from an ELF file and examining
# the relocation entries it contains.
#
# Eli Bendersky (eliben@gmail.com)
# This code is in the public domain
#-------------------------------------------------------------------------------
from __future__ import print_function
import sys
from elftools.elf.elffile import ELFFile
from elftools.elf.relocation import RelocationSection


def process_file(filename):
    print('Processing file:', filename)
    with open(filename) as f:
        elffile = ELFFile(f)

        # Read the .rela.dyn section from the file, by explicitly asking
        # ELFFile for this section
        reladyn_name = '.rela.dyn'
        reladyn = elffile.get_section_by_name(reladyn_name)

        if not isinstance(reladyn, RelocationSection):
            print('  The file has no %s section' % reladyn_name)

        print('  %s section with %s relocations' % (
            reladyn_name, reladyn.num_relocations()))

        for reloc in reladyn.iter_relocations():
            # Use the Relocation's object ability to pretty-print itself to a
            # string to examine it
            print('    ', reloc)

            # Relocation entry attributes are available through item lookup
            print('    offset = %s' % reloc['r_offset'])


if __name__ == '__main__':
    for filename in sys.argv[1:]:
        process_file(filename)



