ROSE  0.9.10.6
Public Member Functions | List of all members
Rose::BinaryAnalysis::BinaryLoaderElfObj Class Reference

Description

A loader suitable for ELF object files.

An ELF object file typically contains one section per function and each section has a preferred virtual address of zero. This loader will map these sections so they do not overlap in virtual memory.

Definition at line 13 of file BinaryLoaderElfObj.h.

#include <BinaryLoaderElfObj.h>

Inheritance diagram for Rose::BinaryAnalysis::BinaryLoaderElfObj:
Inheritance graph
[legend]
Collaboration diagram for Rose::BinaryAnalysis::BinaryLoaderElfObj:
Collaboration graph
[legend]

Public Member Functions

 BinaryLoaderElfObj (const BinaryLoaderElfObj &other)
 
virtual BinaryLoaderElfObjclone () const
 Copy constructor. More...
 
virtual bool can_load (SgAsmGenericHeader *) const
 Capability query. More...
 
virtual SgAsmGenericSectionPtrList get_remap_sections (SgAsmGenericHeader *)
 Same as super class but appends those sections that are not mapped but which contain code. More...
 
virtual MappingContribution align_values (SgAsmGenericSection *, const MemoryMap::Ptr &, rose_addr_t *malign_lo, rose_addr_t *malign_hi, rose_addr_t *va, rose_addr_t *mem_size, rose_addr_t *offset, rose_addr_t *file_size, bool *map_private, rose_addr_t *va_offset, bool *anon_lo, bool *anon_hi, ConflictResolution *resolve)
 Same as super class but relaxes alignment constraints for sections that are ELF Sections but not ELF Segments. More...
 
- Public Member Functions inherited from Rose::BinaryAnalysis::BinaryLoaderElf
 BinaryLoaderElf (const BinaryLoaderElf &other)
 
void add_lib_defaults (SgAsmGenericHeader *header=NULL)
 Sets up library search paths and preloads from the environment. More...
 
virtual void fixup (SgAsmInterpretation *interp, FixupErrors *errors=NULL) ROSE_OVERRIDE
 Performs relocation fixups on the specified interpretation. More...
 
virtual SgAsmGenericSectionfind_section_by_preferred_va (SgAsmGenericHeader *, rose_addr_t va)
 Find the section containing the specified virtual address. More...
 
virtual rose_addr_t rebase (const MemoryMap::Ptr &, SgAsmGenericHeader *, const SgAsmGenericSectionPtrList &) ROSE_OVERRIDE
 Returns a new, temporary base address which is greater than everything that's been mapped already. More...
 
- Public Member Functions inherited from Rose::BinaryAnalysis::BinaryLoader
 BinaryLoader (const BinaryLoader &other)
 
void set_perform_dynamic_linking (bool b)
 Set whether this loader will perform the linking step. More...
 
bool get_perform_dynamic_linking () const
 Returns whether this loader will perform the linking step. More...
 
void set_perform_remap (bool b)
 Set whether this loader will perform the mapping step. More...
 
bool get_perform_remap () const
 Returns whether this loader will perform the mapping step. More...
 
void set_perform_relocations (bool b)
 Set whether this loader will perform the relocation step. More...
 
bool get_perform_relocations () const
 Returns whether this loader will perform the relocation step. More...
 
void add_preload (const std::string &libname)
 Adds a library to the list of pre-loaded libraries. More...
 
const std::vector< std::string > & get_preloads () const
 Returns the list of libraries that will be pre-loaded. More...
 
void add_directory (const std::string &dirname)
 Adds a directory to the list of directories searched for libraries. More...
 
void add_directories (const std::vector< std::string > &dirnames)
 Adds directories to the list of directories searched for libraries. More...
 
const std::vector< std::string > & get_directories () const
 Returns the list of shared object search directories. More...
 
virtual std::string find_so_file (const std::string &libname) const
 Given the name of a shared object, return the fully qualified name where the library is located in the file system. More...
 
virtual void load (SgAsmInterpretation *)
 Conditionally parse, map, link, and/or relocate the interpretation according to properties of this loader. More...
 
virtual void link (SgAsmInterpretation *interp)
 Links an interpretation by parsing all shared objects required by that interpretation. More...
 
virtual void remap (SgAsmInterpretation *interp)
 Maps sections of the interpretation into the virtual address space. More...
 
virtual bool is_linked (SgBinaryComposite *composite, const std::string &filename)
 Returns true if the specified file name is already linked into the AST. More...
 
virtual bool is_linked (SgAsmInterpretation *interp, const std::string &filename)
 Returns true if the specified file name is already linked into the AST. More...
 
virtual std::vector< std::string > dependencies (SgAsmGenericHeader *)
 Finds shared object dependencies of a single binary header. More...
 
virtual void remap (Rose::BinaryAnalysis::MemoryMap::Ptr &, SgAsmGenericHeader *)
 Remaps the sections for a particular header. More...
 
rose_addr_t bialign (rose_addr_t val1, rose_addr_t align1, rose_addr_t val2, rose_addr_t align2)
 Calculate adjustment to cause two values to be aligned to two different alignments. More...
 
virtual void addSectionsForRemap (SgAsmGenericHeader *header, SgAsmGenericSectionPtrList &allSections)
 Selects those sections which should be layed out by the Loader and inserts them into the allSections argument. More...
 

Additional Inherited Members

- Public Types inherited from Rose::BinaryAnalysis::BinaryLoaderElf
enum  {
  VER_FLG_BASE =0x1,
  VER_FLG_WEAK =0x2,
  VERSYM_HIDDEN =0x8000
}
 Flags for version definitions and requirements. More...
 
- Public Types inherited from Rose::BinaryAnalysis::BinaryLoader
enum  MappingContribution {
  CONTRIBUTE_NONE,
  CONTRIBUTE_ADD,
  CONTRIBUTE_SUB
}
 Describes how a section contributes to the overall memory map. More...
 
enum  ConflictResolution {
  RESOLVE_THROW,
  RESOLVE_OVERMAP,
  RESOLVE_REMAP,
  RESOLVE_REMAP_ABOVE
}
 Describes how conflicts are resolved when mapping a section. More...
 
typedef std::vector< ExceptionFixupErrors
 
- Static Public Member Functions inherited from Rose::BinaryAnalysis::BinaryLoaderElf
static void get_dynamic_vars (SgAsmGenericHeader *, std::string &rpath, std::string &runpath)
 Returns the strings associated with certain variables in the ".dynamic" section. More...
 
- Static Public Member Functions inherited from Rose::BinaryAnalysis::BinaryLoader
static void initDiagnostics ()
 Initialize diagnostic streams for binary loaders. More...
 
static void register_subclass (BinaryLoader *)
 Register a loader instance. More...
 
static BinaryLoaderlookup (SgAsmGenericHeader *)
 Finds a suitable loader. More...
 
static BinaryLoaderlookup (SgAsmInterpretation *)
 Finds a suitable loader. More...
 
static void load (SgBinaryComposite *composite, bool read_executable_file_format_only=false)
 Class method to parse, map, link, and/or relocate all interpretations of the specified binary composite. More...
 
static SgAsmGenericFilecreateAsmAST (SgBinaryComposite *composite, std::string filePath)
 Parses a single binary file. More...
 
static int64_t gcd (int64_t a, int64_t b, int64_t *x=NULL, int64_t *y=NULL)
 Extended Euclid Algorithm. More...
 
static SgAsmGenericHeaderPtrList findSimilarHeaders (SgAsmGenericHeader *matchHeader, SgAsmGenericHeaderPtrList &candidateHeaders)
 Find all headers in candidateHeaders that are similar to matchHeader. More...
 
static bool isHeaderSimilar (SgAsmGenericHeader *, SgAsmGenericHeader *)
 Determines whether two headers are similar enough to be in the same interpretation. More...
 
- Static Public Attributes inherited from Rose::BinaryAnalysis::BinaryLoader
static Sawyer::Message::Facility mlog
 Logging facility initialized by initDiagnostics(). More...
 
- Protected Member Functions inherited from Rose::BinaryAnalysis::BinaryLoaderElf
void build_master_symbol_table (SgAsmInterpretation *)
 Builds the master symbol table. More...
 
SgAsmElfSymbolfixup_info_reloc_symbol (SgAsmElfRelocEntry *, const SymverResolver &)
 Returns the defining symbol for a relocation, if any. More...
 
rose_addr_t fixup_info_target_va (SgAsmElfRelocEntry *, SgAsmGenericSection **section_p=NULL, rose_addr_t *adj_p=NULL)
 Returns the virtual address where a relocation should be supplied. More...
 
rose_addr_t fixup_info_symbol_va (SgAsmElfSymbol *, SgAsmGenericSection **section_p=NULL, rose_addr_t *adj_p=NULL)
 Returns the virtual address of a symbol adjusted for remapping. More...
 
rose_addr_t fixup_info_addend (SgAsmElfRelocEntry *, rose_addr_t target_va, const MemoryMap::Ptr &, size_t nbytes=0)
 Returns the addend associated with a relocation. More...
 
rose_addr_t fixup_info_expr (const std::string &expression, SgAsmElfRelocEntry *reloc, const SymverResolver &resolver, const MemoryMap::Ptr &memmap, rose_addr_t *target_va_p=NULL)
 Evaluates a simple postfix expression and returns the result. More...
 
void fixup_apply (rose_addr_t value, SgAsmElfRelocEntry *, const MemoryMap::Ptr &, rose_addr_t target_va=0, size_t nbytes=0)
 Writes a value into memory at the relocation target. More...
 
void fixup_apply_symbol_copy (SgAsmElfRelocEntry *, const SymverResolver &, const MemoryMap::Ptr &)
 Copies symbol memory to the relocation target. More...
 
void performRelocation (SgAsmElfRelocEntry *, const SymverResolver &, const MemoryMap::Ptr &)
 
void performRelocations (SgAsmElfFileHeader *, const MemoryMap::Ptr &)
 
- Protected Attributes inherited from Rose::BinaryAnalysis::BinaryLoaderElf
SymbolMap p_symbols
 Symbol table for an entire interpretation. More...
 

Member Function Documentation

virtual BinaryLoaderElfObj* Rose::BinaryAnalysis::BinaryLoaderElfObj::clone ( ) const
inlinevirtual

Copy constructor.

See super class.

Reimplemented from Rose::BinaryAnalysis::BinaryLoaderElf.

Definition at line 24 of file BinaryLoaderElfObj.h.

virtual bool Rose::BinaryAnalysis::BinaryLoaderElfObj::can_load ( SgAsmGenericHeader ) const
virtual

Capability query.

See super class.

Reimplemented from Rose::BinaryAnalysis::BinaryLoaderElf.

virtual SgAsmGenericSectionPtrList Rose::BinaryAnalysis::BinaryLoaderElfObj::get_remap_sections ( SgAsmGenericHeader )
virtual

Same as super class but appends those sections that are not mapped but which contain code.

Reimplemented from Rose::BinaryAnalysis::BinaryLoaderElf.

virtual MappingContribution Rose::BinaryAnalysis::BinaryLoaderElfObj::align_values ( SgAsmGenericSection ,
const MemoryMap::Ptr ,
rose_addr_t *  malign_lo,
rose_addr_t *  malign_hi,
rose_addr_t *  va,
rose_addr_t *  mem_size,
rose_addr_t *  offset,
rose_addr_t *  file_size,
bool *  map_private,
rose_addr_t *  va_offset,
bool *  anon_lo,
bool *  anon_hi,
ConflictResolution resolve 
)
virtual

Same as super class but relaxes alignment constraints for sections that are ELF Sections but not ELF Segments.

Reimplemented from Rose::BinaryAnalysis::BinaryLoaderElf.


The documentation for this class was generated from the following file: