LIEF: Library to Instrument Executable Formats Version 0.17.0
Loading...
Searching...
No Matches
LIEF::OAT::Binary Class Reference

#include <Binary.hpp>

Inheritance diagram for LIEF::OAT::Binary:
Collaboration diagram for LIEF::OAT::Binary:

Public Types

using dex_files_t = std::vector<std::unique_ptr<DEX::File>>
using it_dex_files = ref_iterator<dex_files_t&, DEX::File*>
using it_const_dex_files = const_ref_iterator<const dex_files_t&, const DEX::File*>
using classes_t = std::unordered_map<std::string, Class*>
using classes_list_t = std::vector<std::unique_ptr<Class>>
using it_classes = ref_iterator<classes_list_t&, Class*>
using it_const_classes = const_ref_iterator<const classes_list_t&, const Class*>
using oat_dex_files_t = std::vector<std::unique_ptr<DexFile>>
using it_oat_dex_files = ref_iterator<oat_dex_files_t&, DexFile*>
using it_const_oat_dex_files = const_ref_iterator<const oat_dex_files_t&, const DexFile*>
using methods_t = std::vector<std::unique_ptr<Method>>
using it_methods = ref_iterator<methods_t&, Method*>
using it_const_methods = const_ref_iterator<const methods_t&, const Method*>
using dex2dex_info_t = std::unordered_map<const DEX::File*, DEX::dex2dex_info_t>
Public Types inherited from LIEF::ELF::Binary
enum  PHDR_RELOC {
  AUTO = 0 , PIE_SHIFT , BSS_END , BINARY_END ,
  SEGMENT_GAP
}
enum class  SEC_INSERT_POS { AUTO = 0 , POST_SEGMENT , POST_SECTION }
 This enum defines where the content of a newly added section should be inserted. More...
using string_list_t = std::vector<std::string>
using notes_t = std::vector<std::unique_ptr<Note>>
 Internal container for storing notes.
using it_notes = ref_iterator<notes_t&, Note*>
 Iterator which outputs Note& object.
using it_const_notes = const_ref_iterator<const notes_t&, const Note*>
 Iterator which outputs const Note& object.
using symbols_version_requirement_t = std::vector<std::unique_ptr<SymbolVersionRequirement>>
 Internal container for storing SymbolVersionRequirement.
using it_symbols_version_requirement = ref_iterator<symbols_version_requirement_t&, SymbolVersionRequirement*>
 Iterator which outputs SymbolVersionRequirement& object.
using it_const_symbols_version_requirement = const_ref_iterator<const symbols_version_requirement_t&, const SymbolVersionRequirement*>
 Iterator which outputs const SymbolVersionRequirement& object.
using symbols_version_definition_t = std::vector<std::unique_ptr<SymbolVersionDefinition>>
 Internal container for storing SymbolVersionDefinition.
using it_symbols_version_definition = ref_iterator<symbols_version_definition_t&, SymbolVersionDefinition*>
 Iterator which outputs SymbolVersionDefinition& object.
using it_const_symbols_version_definition = const_ref_iterator<const symbols_version_definition_t&, const SymbolVersionDefinition*>
 Iterator which outputs const SymbolVersionDefinition& object.
using segments_t = std::vector<std::unique_ptr<Segment>>
 Internal container for storing ELF's Segment.
using it_segments = ref_iterator<segments_t&, Segment*>
 Iterator which outputs Segment& object.
using it_const_segments = const_ref_iterator<const segments_t&, const Segment*>
 Iterator which outputs const Segment& object.
using dynamic_entries_t = std::vector<std::unique_ptr<DynamicEntry>>
 Internal container for storing ELF's DynamicEntry.
using it_dynamic_entries = ref_iterator<dynamic_entries_t&, DynamicEntry*>
 Iterator which outputs DynamicEntry& object.
using it_const_dynamic_entries = const_ref_iterator<const dynamic_entries_t&, const DynamicEntry*>
 Iterator which outputs const DynamicEntry& object.
using symbols_version_t = std::vector<std::unique_ptr<SymbolVersion>>
 Internal container for storing ELF's SymbolVersion.
using it_symbols_version = ref_iterator<symbols_version_t&, SymbolVersion*>
 Iterator which outputs SymbolVersion& object.
using it_const_symbols_version = const_ref_iterator<const symbols_version_t&, const SymbolVersion*>
 Iterator which outputs const SymbolVersion& object.
using relocations_t = std::vector<std::unique_ptr<Relocation>>
 Internal container for storing ELF's Relocation.
using it_pltgot_relocations = filter_iterator<relocations_t&, Relocation*>
 Iterator which outputs plt/got Relocation& object.
using it_const_pltgot_relocations = const_filter_iterator<const relocations_t&, const Relocation*>
 Iterator which outputs plt/got const Relocation& object.
using it_dynamic_relocations = filter_iterator<relocations_t&, Relocation*>
 Iterator which outputs dynamic Relocation& object (not related to the PLT/GOT mechanism).
using it_const_dynamic_relocations = const_filter_iterator<const relocations_t&, const Relocation*>
 Iterator which outputs dynamic const Relocation& object (not related to the PLT/GOT mechanism).
using it_object_relocations = filter_iterator<relocations_t&, Relocation*>
 Iterator which outputs Relocation& object found in object files (.o).
using it_const_object_relocations = const_filter_iterator<const relocations_t&, const Relocation*>
 Iterator which outputs const Relocation& object found in object files (.o).
using it_relocations = ref_iterator<relocations_t&, Relocation*>
 Iterator which outputs Relocation& object.
using it_const_relocations = const_ref_iterator<const relocations_t&, const Relocation*>
 Iterator which outputs const Relocation& object.
using symbols_t = std::vector<std::unique_ptr<Symbol>>
 Internal container for storing ELF's Symbol.
using it_dynamic_symbols = ref_iterator<symbols_t&, Symbol*>
 Iterator which outputs the Dynamic Symbol& object.
using it_const_dynamic_symbols = const_ref_iterator<const symbols_t&, const Symbol*>
 Iterator which outputs the Dynamic const Symbol& object.
using it_symtab_symbols = ref_iterator<symbols_t&, Symbol*>
 Iterator which outputs the static/debug Symbol& object.
using it_const_symtab_symbols = const_ref_iterator<const symbols_t&, const Symbol*>
 Iterator which outputs the static/debug const Symbol& object.
using it_symbols = ref_iterator<std::vector<Symbol*>>
 Iterator which outputs static and dynamic Symbol& object.
using it_const_symbols = const_ref_iterator<std::vector<Symbol*>>
 Iterator which outputs static and dynamic const Symbol& object.
using it_exported_symbols = filter_iterator<std::vector<Symbol*>>
 Iterator which outputs exported Symbol& object.
using it_const_exported_symbols = const_filter_iterator<std::vector<Symbol*>>
 Iterator which outputs exported const Symbol& object.
using it_imported_symbols = filter_iterator<std::vector<Symbol*>>
 Iterator which outputs imported Symbol& object.
using it_const_imported_symbols = const_filter_iterator<std::vector<Symbol*>>
 Iterator which outputs imported const Symbol& object.
using sections_t = std::vector<std::unique_ptr<Section>>
 Internal container for storing ELF's Section.
using it_sections = ref_iterator<sections_t&, Section*>
 Iterator which outputs Section& object.
using it_const_sections = const_ref_iterator<const sections_t&, const Section*>
 Iterator which outputs const Section& object.
Public Types inherited from LIEF::Binary
enum class  VA_TYPES { AUTO = 0 , RVA = 1 , VA = 2 }
 Type of a virtual address. More...
enum  FORMATS {
  UNKNOWN = 0 , ELF , PE , MACHO ,
  OAT
}
using functions_t = std::vector<Function>
using sections_t = std::vector<Section*>
 Internal container.
using it_sections = ref_iterator<sections_t>
 Iterator that outputs LIEF::Section&.
using it_const_sections = const_ref_iterator<sections_t>
 Iterator that outputs const LIEF::Section&.
using symbols_t = std::vector<Symbol*>
 Internal container.
using it_symbols = ref_iterator<symbols_t>
 Iterator that outputs LIEF::Symbol&.
using it_const_symbols = const_ref_iterator<symbols_t>
 Iterator that outputs const LIEF::Symbol&.
using relocations_t = std::vector<Relocation*>
 Internal container.
using it_relocations = ref_iterator<relocations_t>
 Iterator that outputs LIEF::Relocation&.
using it_const_relocations = const_ref_iterator<relocations_t>
 Iterator that outputs const LIEF::Relocation&.
using instructions_it = iterator_range<assembly::Instruction::Iterator>
 Instruction iterator.
Public Types inherited from LIEF::Object
template<class T>
using output_t = add_pointer_t<decay_t<T>>
template<class T>
using output_const_t = add_pointer_t<add_const_t<decay_t<T>>>

Public Member Functions

Binaryoperator= (const Binary &copy)=delete
 Binary (const Binary &copy)=delete
const Headerheader () const
 OAT Header.
Headerheader ()
it_dex_files dex_files ()
 Iterator over LIEF::DEX::File.
it_const_dex_files dex_files () const
it_oat_dex_files oat_dex_files ()
 Iterator over LIEF::OAT::DexFile.
it_const_oat_dex_files oat_dex_files () const
it_const_classes classes () const
 Iterator over LIEF::OAT::Class.
it_classes classes ()
bool has_class (const std::string &class_name) const
 Check if the current OAT has the given class.
const Classget_class (const std::string &class_name) const
 Return the LIEF::OAT::Class with the given name or a nullptr if the class can't be found.
Classget_class (const std::string &class_name)
const Classget_class (size_t index) const
 Return the LIEF::OAT::Class at the given index or a nullptr if it does not exist.
Classget_class (size_t index)
it_const_methods methods () const
 Iterator over LIEF::OAT::Method.
it_methods methods ()
dex2dex_info_t dex2dex_info () const
std::string dex2dex_json_info ()
bool has_vdex () const
void accept (Visitor &visitor) const override
 Method associated with the visitor pattern.
 ~Binary () override
Public Member Functions inherited from LIEF::ELF::Binary
Binaryoperator= (const Binary &)=delete
 Binary (const Binary &copy)=delete
Header::CLASS type () const
 Return binary's class (ELF32 or ELF64).
Headerheader ()
 Return Elf header .
const Headerheader () const
uint64_t last_offset_section () const
 Return the last offset used in binary according to sections table.
uint64_t last_offset_segment () const
 Return the last offset used in binary according to segments table.
uint64_t next_virtual_address () const
 Return the next virtual address available.
it_sections sections ()
 Return an iterator over the binary's sections.
it_const_sections sections () const
uint64_t entrypoint () const override
 Return the binary's entrypoint.
it_segments segments ()
 Return binary's segments.
it_const_segments segments () const
it_dynamic_entries dynamic_entries ()
 Return binary's dynamic entries.
it_const_dynamic_entries dynamic_entries () const
DynamicEntryadd (const DynamicEntry &entry)
 Add the given dynamic entry and return the new entry.
Noteadd (const Note &note)
 Add the given note and return the created entry.
void remove (const DynamicEntry &entry)
 Remove the given dynamic entry.
void remove (DynamicEntry::TAG tag)
 Remove all dynamic entries with the given tag.
void remove (const Section &section, bool clear=false)
 Remove the given section. The clear parameter can be used to zeroize the original content beforehand.
void remove (const Note &note)
 Remove the given note.
void remove (Note::TYPE type)
 Remove all notes with the given type.
void remove (const Segment &seg, bool clear=false)
 Remove the given segment. If clear is set, the original content of the segment will be filled with zeros before removal.
void remove (Segment::TYPE type, bool clear=false)
 Remove all segments associated with the given type.
it_dynamic_symbols dynamic_symbols ()
 Return an iterator over the binary's dynamic symbols The dynamic symbols are those located in the .dynsym section.
it_const_dynamic_symbols dynamic_symbols () const
it_exported_symbols exported_symbols ()
 Return symbols which are exported by the binary.
it_const_exported_symbols exported_symbols () const
it_imported_symbols imported_symbols ()
 Return symbols which are imported by the binary.
it_const_imported_symbols imported_symbols () const
it_symtab_symbols symtab_symbols ()
 Return the debug symbols from the .symtab section.
it_const_symtab_symbols symtab_symbols () const
it_symbols_version symbols_version ()
 Return the symbol versions.
it_const_symbols_version symbols_version () const
it_symbols_version_definition symbols_version_definition ()
 Return symbols version definition.
it_const_symbols_version_definition symbols_version_definition () const
it_symbols_version_requirement symbols_version_requirement ()
 Return Symbol version requirement.
it_const_symbols_version_requirement symbols_version_requirement () const
it_dynamic_relocations dynamic_relocations ()
 Return dynamic relocations.
it_const_dynamic_relocations dynamic_relocations () const
Relocationadd_dynamic_relocation (const Relocation &relocation)
 Add a new dynamic relocation.
Relocationadd_pltgot_relocation (const Relocation &relocation)
 Add a .plt.got relocation. This kind of relocation is usually associated with a PLT stub that aims at resolving the underlying symbol.
Relocationadd_object_relocation (const Relocation &relocation, const Section &section)
 Add relocation for object file (.o).
it_pltgot_relocations pltgot_relocations ()
 Return plt.got relocations.
it_const_pltgot_relocations pltgot_relocations () const
it_object_relocations object_relocations ()
 Return relocations used in an object file (*.o).
it_const_object_relocations object_relocations () const
it_relocations relocations ()
 Return all relocations present in the binary.
it_const_relocations relocations () const
const Relocationget_relocation (uint64_t address) const
 Return relocation associated with the given address. It returns a nullptr if it is not found.
Relocationget_relocation (uint64_t address)
const Relocationget_relocation (const Symbol &symbol) const
 Return relocation associated with the given Symbol It returns a nullptr if it is not found.
Relocationget_relocation (const Symbol &symbol)
const Relocationget_relocation (const std::string &symbol_name) const
 Return relocation associated with the given Symbol name It returns a nullptr if it is not found.
Relocationget_relocation (const std::string &symbol_name)
bool use_gnu_hash () const
 true if GNU hash is used
const GnuHashgnu_hash () const
 Return the GnuHash object in readonly If the ELF binary does not use the GNU hash table, return a nullptr.
bool use_sysv_hash () const
 true if SYSV hash is used
const SysvHashsysv_hash () const
 Return the SysvHash object as a read-only object If the ELF binary does not use the legacy sysv hash table, return a nullptr.
bool has_section (const std::string &name) const
 Check if a section with the given name exists in the binary.
bool has_section_with_offset (uint64_t offset) const
 Check if a section that handles the given offset exists.
bool has_section_with_va (uint64_t va) const
 Check if a section that handles the given virtual address exists.
Sectionget_section (const std::string &name)
 Return Section with the given name. If the section can't be found, it returns a nullptr.
const Sectionget_section (const std::string &name) const
Sectiontext_section ()
 Return the .text section. If the section can't be found, it returns a nullptr.
Sectiondynamic_section ()
 Return the .dynamic section. If the section can't be found, it returns a nullptr.
Sectionhash_section ()
 Return the hash section. If the section can't be found, it returns a nullptr.
Sectionsymtab_symbols_section ()
 Return section which holds the symtab symbols. If the section can't be found, it returns a nullptr.
uint64_t imagebase () const override
 Return program image base. For instance 0x40000.
uint64_t virtual_size () const
 Return the size of the mapped binary.
bool has_interpreter () const
 Check if the binary uses a loader (also named linker or interpreter).
const std::string & interpreter () const
 Return the ELF interpreter if any. (e.g. /lib64/ld-linux-x86-64.so.2) If the binary does not have an interpreter, it returns an empty string.
void interpreter (const std::string &interpreter)
 Change the interpreter.
it_symbols symbols ()
 Return an iterator on both static and dynamic symbols.
it_const_symbols symbols () const
Symbolexport_symbol (const Symbol &symbol)
 Export the given symbol and create it if it doesn't exist.
Symbolexport_symbol (const std::string &symbol_name, uint64_t value=0)
 Export the symbol with the given name and create it if it doesn't exist.
bool has_dynamic_symbol (const std::string &name) const
 Check if the symbol with the given name exists in the dynamic symbols table.
const Symbolget_dynamic_symbol (const std::string &name) const
 Get the dynamic symbol from the given name. Return a nullptr if it can't be found.
Symbolget_dynamic_symbol (const std::string &name)
bool has_symtab_symbol (const std::string &name) const
 Check if the symbol with the given name exists in the symtab symbol table.
const Symbolget_symtab_symbol (const std::string &name) const
 Get the symtab symbol from the given name Return a nullptr if it can't be found.
Symbolget_symtab_symbol (const std::string &name)
string_list_t strings (size_t min_size=5) const
 Return list of the strings used by the ELF binary.
void remove_symbol (const std::string &name)
 Remove symbols with the given name in both:
void remove_symtab_symbol (const std::string &name)
 Remove symtabl symbols with the given name.
void remove_symtab_symbol (Symbol *symbol)
void remove_dynamic_symbol (const std::string &name)
 Remove dynamic symbols with the given name.
void remove_dynamic_symbol (Symbol *symbol)
 Remove the given symbol from the dynamic symbols table.
result< uint64_t > get_function_address (const std::string &func_name) const override
 Return the address of the given function name.
result< uint64_t > get_function_address (const std::string &func_name, bool demangled) const
 Return the address of the given function name.
Sectionadd (const Section &section, bool loaded=true, SEC_INSERT_POS pos=SEC_INSERT_POS::AUTO)
 Add a new section in the binary.
Sectionextend (const Section &section, uint64_t size)
Symboladd_symtab_symbol (const Symbol &symbol)
 Add a symtab symbol.
Symboladd_dynamic_symbol (const Symbol &symbol, const SymbolVersion *version=nullptr)
 Add a dynamic symbol with the associated SymbolVersion.
Symboladd_exported_function (uint64_t address, const std::string &name="")
 Create a symbol for the function at the given address and export it.
DynamicEntryLibraryadd_library (const std::string &library_name)
 Add a library as dependency.
void remove_library (const std::string &library_name)
 Remove the given library from the dependencies.
DynamicEntryLibraryget_library (const std::string &library_name)
 Get the library object (DynamicEntryLibrary) from the given name If the library can't be found, it returns a nullptr.
const DynamicEntryLibraryget_library (const std::string &library_name) const
 Get the library object (DynamicEntryLibrary) from the given name If the library can't be found, it returns a nullptr.
bool has_library (const std::string &name) const
 Check if the given library name exists in the current binary.
Segmentadd (const Segment &segment, uint64_t base=0)
 Add a new segment in the binary.
Segmentreplace (const Segment &new_segment, const Segment &original_segment, uint64_t base=0)
 Replace the segment given in 2nd parameter with the segment given in the first one and return the updated segment.
Segmentextend (const Segment &segment, uint64_t size)
void patch_address (uint64_t address, const std::vector< uint8_t > &patch_value, LIEF::Binary::VA_TYPES addr_type=LIEF::Binary::VA_TYPES::AUTO) override
 Patch the content at virtual address address with patch_value.
void patch_address (uint64_t address, uint64_t patch_value, size_t size=sizeof(uint64_t), LIEF::Binary::VA_TYPES addr_type=LIEF::Binary::VA_TYPES::AUTO) override
 Patch the address with the given value.
void patch_pltgot (const Symbol &symbol, uint64_t address)
 Patch the imported symbol with the address.
void patch_pltgot (const std::string &symbol_name, uint64_t address)
 Patch the imported symbol's name with the address.
void strip ()
 Strip the binary by removing symtab symbols.
void remove_section (const std::string &name, bool clear=false) override
 Remove a binary's section.
void write (const std::string &filename)
 Reconstruct the binary object and write it in filename.
void write (const std::string &filename, Builder::config_t config)
 Reconstruct the binary object with the given config and write it in filename.
void write (std::ostream &os)
 Reconstruct the binary object and write it in os stream.
void write (std::ostream &os, Builder::config_t config)
 Reconstruct the binary object with the given config and write it in os stream.
std::vector< uint8_t > raw ()
 Reconstruct the binary object and return its content as a byte vector.
result< uint64_t > virtual_address_to_offset (uint64_t virtual_address) const
 Convert a virtual address to a file offset.
result< uint64_t > offset_to_virtual_address (uint64_t offset, uint64_t slide=0) const override
 Convert the given offset into a virtual address.
bool is_pie () const override
 Check if the binary has been compiled with -fpie -pie flags.
bool has_nx () const override
 Check if the binary uses the NX protection (Non executable stack).
int64_t dynsym_idx (const std::string &name) const
 Symbol index in the dynamic symbol table or -1 if the symbol does not exist.
int64_t dynsym_idx (const Symbol &sym) const
int64_t symtab_idx (const std::string &name) const
 Symbol index from the .symtab section or -1 if the symbol is not present.
int64_t symtab_idx (const Symbol &sym) const
const Sectionsection_from_offset (uint64_t offset, bool skip_nobits=true) const
 Return the ELF::Section from the given offset. Return a nullptr if a section can't be found.
Sectionsection_from_offset (uint64_t offset, bool skip_nobits=true)
const Sectionsection_from_virtual_address (uint64_t address, bool skip_nobits=true) const
 Return the ELF::Section from the given address. Return a nullptr if a section can't be found.
Sectionsection_from_virtual_address (uint64_t address, bool skip_nobits=true)
const Segmentsegment_from_virtual_address (uint64_t address) const
 Return the ELF::Segment from the given address. Return a nullptr if a segment can't be found.
Segmentsegment_from_virtual_address (uint64_t address)
const Segmentsegment_from_virtual_address (Segment::TYPE type, uint64_t address) const
Segmentsegment_from_virtual_address (Segment::TYPE type, uint64_t address)
const Segmentsegment_from_offset (uint64_t offset) const
 Return the ELF::Segment from the offset. Return a nullptr if a segment can't be found.
Segmentsegment_from_offset (uint64_t offset)
const DynamicEntryget (DynamicEntry::TAG tag) const
 Return the first ELF::DynamicEntry associated with the given tag If the tag can't be found, it returns a nullptr.
DynamicEntryget (DynamicEntry::TAG tag)
const Segmentget (Segment::TYPE type) const
 Return the first ELF::Segment associated with the given type. If a segment can't be found, it returns a nullptr.
Segmentget (Segment::TYPE type)
const Noteget (Note::TYPE type) const
 Return the first ELF::Note associated with the given type If a note can't be found, it returns a nullptr.
Noteget (Note::TYPE type)
const Sectionget (Section::TYPE type) const
 Return the first ELF::Section associated with the given type If a section can't be found, it returns a nullptr.
Sectionget (Section::TYPE type)
bool has (DynamicEntry::TAG tag) const
 Check if an ELF::DynamicEntry associated with the given tag exists.
bool has (Segment::TYPE type) const
 Check if ELF::Segment associated with the given type exists.
bool has (Note::TYPE type) const
 Check if a ELF::Note associated with the given type exists.
bool has (Section::TYPE type) const
 Check if a ELF::Section associated with the given type exists.
span< const uint8_t > get_content_from_virtual_address (uint64_t virtual_address, uint64_t size, Binary::VA_TYPES addr_type=Binary::VA_TYPES::AUTO) const override
 Return the content located at virtual address.
void permute_dynamic_symbols (const std::vector< size_t > &permutation)
 Apply the given permutation on the dynamic symbols table.
LIEF::Binary::functions_t ctor_functions () const override
 List of binary constructors (typically, the functions located in the .init_array).
LIEF::Binary::functions_t dtor_functions () const
 List of the binary destructors (typically, the functions located in the .fini_array).
LIEF::Binary::functions_t functions () const
 List of the functions found the in the binary.
bool has_notes () const
 true if the binary embeds notes
it_const_notes notes () const
 Return an iterator over the ELF's LIEF::ELF::Note.
it_notes notes ()
uint64_t eof_offset () const
 Return the last offset used by the ELF binary according to both: the sections table and the segments table.
bool has_overlay () const
 True if data are present at the end of the binary.
span< const uint8_t > overlay () const
 Overlay data (if any).
void overlay (std::vector< uint8_t > overlay)
 Function to set the overlay.
uint64_t relocate_phdr_table (PHDR_RELOC type)
 Force relocating the segments table in a specific way.
std::vector< uint64_t > get_relocated_dynamic_array (DynamicEntry::TAG tag) const
 Return the array defined by the given tag (e.g. DynamicEntry::TAG::INIT_ARRAY) with relocations applied (if any).
bool is_targeting_android () const
 True if the current ELF is targeting Android.
result< size_t > get_section_idx (const Section &section) const
 Find the index of the section given in the first parameter.
result< size_t > get_section_idx (const std::string &name) const
 Find the index of the section with the name given in the first parameter.
const SymbolVersionRequirementfind_version_requirement (const std::string &libname) const
 Try to find the SymbolVersionRequirement associated with the given library name (e.g. libc.so.6).
SymbolVersionRequirementfind_version_requirement (const std::string &name)
bool remove_version_requirement (const std::string &libname)
 Deletes all required symbol versions linked to the specified library name. The function returns true if the operation succeed, false otherwise.
uint8_t ptr_size () const
uint64_t page_size () const override
 Get the default memory page size according to the architecture and the format of the current binary.
size_t hash (const std::string &name)
 ~Binary () override
std::ostream & print (std::ostream &os) const override
Binaryoperator+= (const DynamicEntry &entry)
Binaryoperator+= (const Section &section)
Binaryoperator+= (const Segment &segment)
Binaryoperator+= (const Note &note)
Binaryoperator-= (const DynamicEntry &entry)
Binaryoperator-= (DynamicEntry::TAG tag)
Binaryoperator-= (const Note &note)
Binaryoperator-= (Note::TYPE type)
Segmentoperator[] (Segment::TYPE type)
const Segmentoperator[] (Segment::TYPE type) const
DynamicEntryoperator[] (DynamicEntry::TAG tag)
const DynamicEntryoperator[] (DynamicEntry::TAG tag) const
Noteoperator[] (Note::TYPE type)
const Noteoperator[] (Note::TYPE type) const
Sectionoperator[] (Section::TYPE type)
const Sectionoperator[] (Section::TYPE type) const
bool should_swap () const
Public Member Functions inherited from LIEF::Binary
 Binary ()
 Binary (FORMATS fmt)
 ~Binary () override
Binaryoperator= (const Binary &)=delete
 Binary (const Binary &)=delete
FORMATS format () const
 Executable format (ELF, PE, Mach-O) of the underlying binary.
Header header () const
 Return the abstract header of the binary.
it_symbols symbols ()
 Return an iterator over the abstracted symbols in which the elements can be modified.
it_const_symbols symbols () const
 Return an iterator over the abstracted symbols in which the elements can't be modified.
bool has_symbol (const std::string &name) const
 Check if a Symbol with the given name exists.
const Symbolget_symbol (const std::string &name) const
 Return the Symbol with the given name If the symbol does not exist, return a nullptr.
Symbolget_symbol (const std::string &name)
it_sections sections ()
 Return an iterator over the binary's sections (LIEF::Section).
it_const_sections sections () const
it_relocations relocations ()
 Return an iterator over the binary relocation (LIEF::Relocation).
it_const_relocations relocations () const
uint64_t original_size () const
 Binary's original size.
functions_t exported_functions () const
 Return the functions exported by the binary.
std::vector< std::string > imported_libraries () const
 Return libraries which are imported by the binary.
functions_t imported_functions () const
 Return functions imported by the binary.
std::vector< uint64_t > xref (uint64_t address) const
template<class T>
LIEF::result< T > get_int_from_virtual_address (uint64_t va, VA_TYPES addr_type=VA_TYPES::AUTO) const
 Get the integer value at the given virtual address.
void original_size (uint64_t size)
 Change binary's original size.
DebugInfodebug_info () const
 Return the debug info if present. It can be either a LIEF::dwarf::DebugInfo or a LIEF::pdb::DebugInfo.
instructions_it disassemble (uint64_t address, size_t size) const
 Disassemble code starting a the given virtual address and with the given size.
instructions_it disassemble (uint64_t address) const
 Disassemble code starting a the given virtual address.
instructions_it disassemble (const std::string &function) const
 Disassemble code for the given symbol name.
instructions_it disassemble (const uint8_t *buffer, size_t size, uint64_t address=0) const
 Disassemble code provided by the given buffer at the specified address parameter.
instructions_it disassemble (const std::vector< uint8_t > &buffer, uint64_t address=0) const
 Disassemble code provided by the given vector of bytes at the specified address parameter.
instructions_it disassemble (LIEF::span< const uint8_t > buffer, uint64_t address=0) const
instructions_it disassemble (LIEF::span< uint8_t > buffer, uint64_t address=0) const
std::vector< uint8_t > assemble (uint64_t address, const std::string &Asm, assembly::AssemblerConfig &config=assembly::AssemblerConfig::default_config())
 Assemble and patch the provided assembly code at the specified address.
std::vector< uint8_t > assemble (uint64_t address, const llvm::MCInst &inst)
 Assemble and patch the address with the given LLVM MCInst.
std::vector< uint8_t > assemble (uint64_t address, const std::vector< llvm::MCInst > &insts)
 Assemble and patch the address with the given LLVM MCInst.
Public Member Functions inherited from LIEF::Object
 Object ()
 Object (const Object &other)
Objectoperator= (const Object &other)
 Object (Object &&other) noexcept=default
Objectoperator= (Object &&other) noexcept=default
template<class T>
output_t< T > as ()
template<class T>
output_const_t< T > as () const
virtual bool operator== (const Object &other) const
virtual bool operator!= (const Object &other) const
virtual ~Object ()

Static Public Member Functions

static bool classof (const LIEF::Binary *bin)
Static Public Member Functions inherited from LIEF::ELF::Binary
static bool classof (const LIEF::Binary *bin)

Member Typedef Documentation

◆ classes_list_t

using LIEF::OAT::Binary::classes_list_t = std::vector<std::unique_ptr<Class>>

◆ classes_t

using LIEF::OAT::Binary::classes_t = std::unordered_map<std::string, Class*>

◆ dex2dex_info_t

◆ dex_files_t

using LIEF::OAT::Binary::dex_files_t = std::vector<std::unique_ptr<DEX::File>>

◆ it_classes

◆ it_const_classes

◆ it_const_dex_files

◆ it_const_methods

◆ it_const_oat_dex_files

◆ it_dex_files

◆ it_methods

◆ it_oat_dex_files

◆ methods_t

using LIEF::OAT::Binary::methods_t = std::vector<std::unique_ptr<Method>>

◆ oat_dex_files_t

using LIEF::OAT::Binary::oat_dex_files_t = std::vector<std::unique_ptr<DexFile>>

Constructor & Destructor Documentation

◆ Binary()

LIEF::OAT::Binary::Binary ( const Binary & copy)
delete

References Binary().

Referenced by Binary(), operator<<, and operator=().

◆ ~Binary()

LIEF::OAT::Binary::~Binary ( )
override

Member Function Documentation

◆ accept()

void LIEF::OAT::Binary::accept ( Visitor & visitor) const
overridevirtual

Method associated with the visitor pattern.

Reimplemented from LIEF::ELF::Binary.

◆ classes() [1/2]

it_classes LIEF::OAT::Binary::classes ( )

◆ classes() [2/2]

it_const_classes LIEF::OAT::Binary::classes ( ) const

Iterator over LIEF::OAT::Class.

◆ classof()

bool LIEF::OAT::Binary::classof ( const LIEF::Binary * bin)
inlinestatic

◆ dex2dex_info()

dex2dex_info_t LIEF::OAT::Binary::dex2dex_info ( ) const

◆ dex2dex_json_info()

std::string LIEF::OAT::Binary::dex2dex_json_info ( )

◆ dex_files() [1/2]

it_dex_files LIEF::OAT::Binary::dex_files ( )

Iterator over LIEF::DEX::File.

◆ dex_files() [2/2]

it_const_dex_files LIEF::OAT::Binary::dex_files ( ) const

◆ get_class() [1/4]

Class * LIEF::OAT::Binary::get_class ( const std::string & class_name)

◆ get_class() [2/4]

const Class * LIEF::OAT::Binary::get_class ( const std::string & class_name) const

Return the LIEF::OAT::Class with the given name or a nullptr if the class can't be found.

◆ get_class() [3/4]

Class * LIEF::OAT::Binary::get_class ( size_t index)

◆ get_class() [4/4]

const Class * LIEF::OAT::Binary::get_class ( size_t index) const

Return the LIEF::OAT::Class at the given index or a nullptr if it does not exist.

◆ has_class()

bool LIEF::OAT::Binary::has_class ( const std::string & class_name) const

Check if the current OAT has the given class.

◆ has_vdex()

bool LIEF::OAT::Binary::has_vdex ( ) const
inline

◆ header() [1/2]

Header & LIEF::OAT::Binary::header ( )

◆ header() [2/2]

const Header & LIEF::OAT::Binary::header ( ) const

◆ methods() [1/2]

it_methods LIEF::OAT::Binary::methods ( )

◆ methods() [2/2]

it_const_methods LIEF::OAT::Binary::methods ( ) const

Iterator over LIEF::OAT::Method.

◆ oat_dex_files() [1/2]

it_oat_dex_files LIEF::OAT::Binary::oat_dex_files ( )

Iterator over LIEF::OAT::DexFile.

◆ oat_dex_files() [2/2]

it_const_oat_dex_files LIEF::OAT::Binary::oat_dex_files ( ) const

◆ operator=()

Binary & LIEF::OAT::Binary::operator= ( const Binary & copy)
delete

References Binary().


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