dynamic.py: move logic around to allow symbol access more easily (#346)
authorAndreas Ziegler <andreas.ziegler@fau.de>
Tue, 12 Jan 2021 15:03:47 +0000 (16:03 +0100)
committerGitHub <noreply@github.com>
Tue, 12 Jan 2021 15:03:47 +0000 (07:03 -0800)
commit14bc1632fe36c902449e13e9dc11797b948f45d5
treea064e2345e344c99f686ca26b5b067d41d4eb63b
parentd71faebcd58ef26ce973044f2a822a494c42a3c1
dynamic.py: move logic around to allow symbol access more easily (#346)

So far, the implementation of num_symbols() and get_symbol()
in the DynamicSegment class depended on iter_symbols().
However, most part of iter_symbols() is actually about
determining the number of symbols. Let's move that logic to
the correct method and use it in iter_symbols().

Additionally, in an ELF file without any exported symbols,
the hash table will be empty and will thus return a too low
number of symbols. However, a loader might still need to
access the imported symbols (which also have an entry in
the symbol table, with st_shndx set to SHN_UNDEF). To allow
this, make get_symbol() take any index and simply read the
symbol data from the corresponding index, and use
get_symbol() from iter_symbols(). This way, one can for
example use symbol index information from relocation entries
to directly access the symbol data.

These changes also make the logic in DynamicSegment resemble
the code in SymbolTableSection more closely.

Fixes: #342
elftools/elf/dynamic.py
test/test_dynamic.py