HomePhabricator

[elfabi] Add support for reading dynamic symbols from binaries

Description

[elfabi] Add support for reading dynamic symbols from binaries

This patch adds initial support for reading dynamic symbols from ELF binaries. Currently, STT_NOTYPE, STT_OBJECT, STT_FUNC, and STT_TLS are explicitly supported. Other symbol types are mapped to ELFSymbolType::Unknown to improve signal/noise ratio.

Symbols must meet two criteria to be read into in an ELFStub:

  • The symbol's binding must be STB_GLOBAL or STB_WEAK.
  • The symbol's visibility must be STV_DEFAULT or STV_PROTECTED.

This filters out symbols that aren't of interest during compile-time linking against a shared object.

This change uses DT_HASH and DT_GNU_HASH to determine the size of .dynsym. Using hash tables to determine the number of symbols in .dynsym allows llvm-elfabi to work on binaries without relying on section headers.

Differential Revision: https://reviews.llvm.org/D56031

Details

Committed
amontanezJan 24 2019, 2:39 PM
Differential Revision
D56031: [elfabi] Add support for reading dynamic symbols from binaries
Parents
rL352120: Merging r352040:
Branches
Unknown
Tags
Unknown