support parsing of dynamic ELFs w/out section headers
authorMike Frysinger <vapier@gentoo.org>
Sun, 9 Jun 2013 22:42:40 +0000 (18:42 -0400)
committerMike Frysinger <vapier@gentoo.org>
Sun, 9 Jun 2013 22:42:40 +0000 (18:42 -0400)
commitdbd6f9c2583b9d37a81c540ba958a8ef4324fa12
treed669c9d8eaa025001e4da5557e588027b5da266d
parent892bddbeb285c6933730ee6af578a9ee717b50cd
support parsing of dynamic ELFs w/out section headers

At runtime, ELFs do not use the section headers at all. Instead, only
the program segments and dynamic tags get used. This means you can
strip the section table completely from an ELF and have it still work.

In practice, people rarely do this, but it's not unheard of. Make the
Dynamic tags work even in these cases by loading the strings table the
same way the runtime loader does:
 * parse the symtab address from DT_STRTAB
 * locate the file offset via the program segments

In order to avoid circular deps (parsing a dyntag requires walking parsed
dyntags), add a set of internal funcs for returning the raw values.

You can see this in action:
$ eu-strip -g --strip-sections a.out
$ readelf -S a.out
<nothing>
$ lddtree.py ./a.out
a.out (interpreter => /lib64/ld-linux-x86-64.so.2)
    libïäöëß.so => None
    libc.so.6 => /lib64/libc.so.6
elftools/elf/dynamic.py
test/test_dynamic.py
test/testfiles_for_unittests/aarch64_super_stripped.elf [new file with mode: 0755]