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

Class which represents a PE binary This is the main interface to manage and modify a PE executable. More...

#include <Binary.hpp>

Inheritance diagram for LIEF::PE::Binary:
Collaboration diagram for LIEF::PE::Binary:

Public Types

using sections_t = std::vector<std::unique_ptr<Section>>
 Internal container for storing PE's Section.
 
using it_sections = ref_iterator<sections_t&, Section*>
 Iterator that outputs Section& object.
 
using it_const_sections = const_ref_iterator<const sections_t&, const Section*>
 Iterator that outputs const Section& object.
 
using data_directories_t = std::vector<std::unique_ptr<DataDirectory>>
 Internal container for storing PE's DataDirectory.
 
using it_data_directories = ref_iterator<data_directories_t&, DataDirectory*>
 Iterator that outputs DataDirectory&.
 
using it_const_data_directories = const_ref_iterator<const data_directories_t&, const DataDirectory*>
 Iterator that outputs const DataDirectory&.
 
using relocations_t = std::vector<std::unique_ptr<Relocation>>
 Internal container for storing PE's Relocation.
 
using it_relocations = ref_iterator<relocations_t&, Relocation*>
 Iterator that outputs Relocation&.
 
using it_const_relocations = const_ref_iterator<const relocations_t&, const Relocation*>
 Iterator that outputs const Relocation&.
 
using imports_t = std::vector<Import>
 Internal container for storing PE's Import.
 
using it_imports = ref_iterator<imports_t&>
 Iterator that output Import&.
 
using it_const_imports = const_ref_iterator<const imports_t&>
 Iterator that outputs const Import&.
 
using delay_imports_t = std::vector<DelayImport>
 Internal container for storing PE's DelayImport.
 
using it_delay_imports = ref_iterator<delay_imports_t&>
 Iterator that output DelayImport&.
 
using it_const_delay_imports = const_ref_iterator<const delay_imports_t&>
 Iterator that outputs const DelayImport&.
 
using debug_entries_t = std::vector<std::unique_ptr<Debug>>
 Internal container for storing Debug information.
 
using it_debug_entries = ref_iterator<debug_entries_t&, Debug*>
 Iterator that outputs Debug&.
 
using it_const_debug_entries = const_ref_iterator<const debug_entries_t&, const Debug*>
 Iterator that outputs const Debug&.
 
using symbols_t = std::vector<std::unique_ptr<Symbol>>
 Internal container for storing COFF Symbols.
 
using it_symbols = ref_iterator<symbols_t&, Symbol*>
 Iterator that outputs Symbol&.
 
using it_const_symbols = const_ref_iterator<const symbols_t&, const Symbol*>
 Iterator that outputs const Symbol&.
 
using strings_table_t = std::vector<COFFString>
 Internal container for storing strings.
 
using it_strings_table = ref_iterator<strings_table_t&>
 Iterator that outputs std::string&.
 
using it_const_strings_table = const_ref_iterator<const strings_table_t&>
 Iterator that outputs const std::string&.
 
using signatures_t = std::vector<Signature>
 Internal container for storing PE's authenticode Signature.
 
using it_signatures = ref_iterator<signatures_t&>
 Iterator that outputs Signature&.
 
using it_const_signatures = const_ref_iterator<const signatures_t&>
 Iterator that outputs const Signature&.
 
using exceptions_t = std::vector<std::unique_ptr<ExceptionInfo>>
 Internal container for storing runtime function associated with exceptions.
 
using it_exceptions = ref_iterator<exceptions_t&, ExceptionInfo*>
 Iterator that outputs ExceptionInfo&.
 
using it_const_exceptions = const_ref_iterator<const exceptions_t&, const ExceptionInfo*>
 Iterator that outputs const ExceptionInfo&.
 
- 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

 Binary ()
 
 ~Binary () override
 
PE_TYPE type () const
 Return PE32 or PE32+
 
uint64_t rva_to_offset (uint64_t RVA) const
 Convert a Relative Virtual Address into an offset.
 
uint64_t va_to_offset (uint64_t VA) const
 Convert the absolute virtual address into an 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.
 
uint64_t imagebase () const override
 Return binary's imagebase. 0 if not relevant.
 
Sectionsection_from_offset (uint64_t offset)
 Find the section associated that encompasses the given offset.
 
const Sectionsection_from_offset (uint64_t offset) const
 
Sectionsection_from_rva (uint64_t virtual_address)
 Find the section associated that encompasses the given RVA.
 
const Sectionsection_from_rva (uint64_t virtual_address) const
 
it_sections sections ()
 Return an iterator over the PE's Section.
 
it_const_sections sections () const
 
DosHeaderdos_header ()
 Return a reference to the PE::DosHeader object.
 
const DosHeaderdos_header () const
 
Headerheader ()
 Return a reference to the PE::Header object.
 
const Headerheader () const
 
OptionalHeaderoptional_header ()
 Header that follows the header(). It is named optional from the COFF specfication but it is mandatory in a PE file.
 
const OptionalHeaderoptional_header () const
 
uint32_t compute_checksum () const
 Re-compute the value of OptionalHeader::checksum. If both values do not match, it could mean that the binary has been modified after the compilation.
 
uint64_t virtual_size () const
 Compute the binary's virtual size. It should match OptionalHeader::sizeof_image.
 
uint32_t sizeof_headers () const
 Compute the size of all the headers.
 
TLStls ()
 Return a reference to the TLS object.
 
const TLStls () const
 
TLStls (const TLS &tls)
 Set a TLS object in the current Binary.
 
bool has_tls () const
 Check if the current binary has a TLS object.
 
void remove_tls ()
 Remove the TLS from the binary.
 
bool has_imports () const
 Check if the current binary contains imports.
 
bool has_signatures () const
 Check if the current binary contains signatures.
 
bool has_exports () const
 Check if the current binary has exports.
 
bool has_resources () const
 Check if the current binary has resources.
 
bool has_exceptions () const
 Check if the current binary has exceptions.
 
bool has_relocations () const
 Check if the current binary has relocations.
 
bool has_debug () const
 Check if the current binary contains debug information.
 
bool has_configuration () const
 Check if the current binary has a load configuration.
 
bool is_reproducible_build () const
 Check if the current binary is reproducible build, replacing timestamps by a compile hash.
 
it_const_signatures signatures () const
 Return an iterator over the Signature object(s) if the binary is signed.
 
it_signatures signatures ()
 
Signature::VERIFICATION_FLAGS verify_signature (Signature::VERIFICATION_CHECKS checks=Signature::VERIFICATION_CHECKS::DEFAULT) const
 Verify the binary against the embedded signature(s) (if any) First, it checks that the embedded signatures are correct (c.f. Signature::check) and then, it checks that the authentihash matches ContentInfo::digest.
 
Signature::VERIFICATION_FLAGS verify_signature (const Signature &sig, Signature::VERIFICATION_CHECKS checks=Signature::VERIFICATION_CHECKS::DEFAULT) const
 Verify the binary with the Signature object provided in the first parameter. It can be used to verify a detached signature:
 
std::vector< uint8_t > authentihash (ALGORITHMS algo) const
 Compute the authentihash according to the algorithm provided in the first parameter.
 
Exportget_export ()
 Return the Export object.
 
const Exportget_export () const
 
Exportset_export (const Export &export_table)
 
it_symbols symbols ()
 Return binary Symbols.
 
it_const_symbols symbols () const
 
it_const_strings_table coff_string_table () const
 Iterator over the strings located in the COFF string table.
 
it_strings_table coff_string_table ()
 
COFFStringfind_coff_string (uint32_t offset)
 Try to find the COFF string at the given offset in the COFF string table.
 
const COFFStringfind_coff_string (uint32_t offset) const
 
ResourceNoderesources ()
 Return resources as a tree or a nullptr if there is no resources.
 
const ResourceNoderesources () const
 
ResourceNodeset_resources (const ResourceNode &root)
 Change or set the current resource tree with the new one provided in parameter.
 
ResourceNodeset_resources (std::unique_ptr< ResourceNode > root)
 
result< ResourcesManagerresources_manager () const
 Return the ResourcesManager (class to manage resources more easily than the tree one)
 
Sectionget_section (const std::string &name)
 Return binary's section from its name. If the secion can't be found, return a nullptr.
 
const Sectionget_section (const std::string &name) const
 
const Sectionimport_section () const
 Return the section associated with import table or a nullptr if the binary does not have an import table.
 
Sectionimport_section ()
 
void remove_section (const std::string &name, bool clear=false) override
 Delete the section with the given name.
 
void remove (const Section &section, bool clear=false)
 Remove the given section.
 
Sectionadd_section (const Section &section)
 Add a section to the binary and return the section added.
 
it_relocations relocations ()
 Return an iterator over the PE's Relocation.
 
it_const_relocations relocations () const
 
Relocationadd_relocation (const Relocation &relocation)
 Add a new PE Relocation.
 
void remove_all_relocations ()
 Remove all the relocations.
 
it_data_directories data_directories ()
 Return an iterator over the DataDirectory present in the Binary.
 
it_const_data_directories data_directories () const
 
DataDirectorydata_directory (DataDirectory::TYPES type)
 Return the DataDirectory with the given type (or index)
 
const DataDirectorydata_directory (DataDirectory::TYPES type) const
 
bool has (DataDirectory::TYPES type) const
 Check if the current binary has the given DataDirectory::TYPES.
 
it_debug_entries debug ()
 Return an iterator over the Debug entries.
 
it_const_debug_entries debug () const
 
Debugadd_debug_info (const Debug &entry)
 Add a new debug entry.
 
bool remove_debug (const Debug &entry)
 Remove a specific debug entry.
 
bool clear_debug ()
 Remove all debug info from the binary.
 
const CodeViewPDBcodeview_pdb () const
 Return the CodeViewPDB object if present.
 
const LoadConfigurationload_configuration () const
 Retrun the LoadConfiguration object or a nullptr if the binary does not use the LoadConfiguration.
 
LoadConfigurationload_configuration ()
 
span< const uint8_t > overlay () const
 Return the overlay content.
 
span< uint8_t > overlay ()
 
uint64_t overlay_offset () const
 Return the original overlay offset.
 
span< const uint8_t > dos_stub () const
 Return the DOS stub content.
 
span< uint8_t > dos_stub ()
 
void dos_stub (std::vector< uint8_t > content)
 Update the DOS stub content.
 
RichHeaderrich_header ()
 Return a reference to the RichHeader object.
 
const RichHeaderrich_header () const
 
void rich_header (const RichHeader &rich_header)
 Set a RichHeader object in the current Binary.
 
bool has_rich_header () const
 Check if the current binary has a RichHeader object.
 
it_imports imports ()
 Return an iterator over the binary imports.
 
it_const_imports imports () const
 
Importget_import (const std::string &import_name)
 Return the Import matching the provided name (case sensitive)
 
const Importget_import (const std::string &import_name) const
 
bool has_import (const std::string &import_name) const
 True if the binary imports the given library name
 
bool has_delay_imports () const
 Check if the current binary contains delay imports.
 
it_delay_imports delay_imports ()
 Return an iterator over the binary's delay imports.
 
it_const_delay_imports delay_imports () const
 
DelayImportget_delay_import (const std::string &import_name)
 Returns the DelayImport matching the given name. If it can't be found, it returns a nullptr.
 
const DelayImportget_delay_import (const std::string &import_name) const
 
bool has_delay_import (const std::string &import_name) const
 True if the binary delay-imports the given library name
 
Importadd_import (const std::string &name)
 Add an imported library (i.e. DLL) to the binary.
 
bool remove_import (const std::string &name)
 Remove the imported library with the given name
 
void remove_all_imports ()
 Remove all libraries in the binary.
 
std::unique_ptr< Builderwrite (const std::string &filename)
 Reconstruct the binary object and write the raw PE in filename
 
std::unique_ptr< Builderwrite (const std::string &filename, const Builder::config_t &config)
 Reconstruct the binary object with the given configuration and write it in filename
 
std::unique_ptr< Builderwrite (std::ostream &os)
 Reconstruct the binary object and write the raw PE in os stream.
 
std::unique_ptr< Builderwrite (std::ostream &os, const Builder::config_t &config)
 
void accept (Visitor &visitor) const override
 Method so that a visitor can visit us.
 
void patch_address (uint64_t address, const std::vector< uint8_t > &patch_value, VA_TYPES addr_type=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), VA_TYPES addr_type=VA_TYPES::AUTO) override
 Patch the address with the given value.
 
void fill_address (uint64_t address, size_t size, uint8_t value=0, VA_TYPES addr_type=VA_TYPES::AUTO)
 Fill the content at the provided with a fixed value.
 
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 the provided virtual address.
 
uint64_t entrypoint () const override
 Return the binary's entrypoint (It is the same value as OptionalHeader::addressof_entrypoint.
 
bool is_pie () const override
 Check if the binary is position independent.
 
bool has_nx () const override
 Check if the binary uses NX protection.
 
uint64_t last_section_offset () const
 
DataDirectoryexport_dir ()
 Return the data directory associated with the export table.
 
const DataDirectoryexport_dir () const
 
DataDirectoryimport_dir ()
 Return the data directory associated with the import table.
 
const DataDirectoryimport_dir () const
 
DataDirectoryrsrc_dir ()
 Return the data directory associated with the resources tree.
 
const DataDirectoryrsrc_dir () const
 
DataDirectoryexceptions_dir ()
 Return the data directory associated with the exceptions.
 
const DataDirectoryexceptions_dir () const
 
DataDirectorycert_dir ()
 Return the data directory associated with the certificate table (authenticode)
 
const DataDirectorycert_dir () const
 
DataDirectoryrelocation_dir ()
 Return the data directory associated with the relocation table.
 
const DataDirectoryrelocation_dir () const
 
DataDirectorydebug_dir ()
 Return the data directory associated with the debug table.
 
const DataDirectorydebug_dir () const
 
DataDirectorytls_dir ()
 Return the data directory associated with TLS.
 
const DataDirectorytls_dir () const
 
DataDirectoryload_config_dir ()
 Return the data directory associated with the load config.
 
const DataDirectoryload_config_dir () const
 
DataDirectoryiat_dir ()
 Return the data directory associated with the IAT.
 
const DataDirectoryiat_dir () const
 
DataDirectorydelay_dir ()
 Return the data directory associated with delayed imports.
 
const DataDirectorydelay_dir () const
 
LIEF::Binary::functions_t ctor_functions () const override
 Return the list of the binary constructors.
 
LIEF::Binary::functions_t functions () const
 All functions found in the binary
 
LIEF::Binary::functions_t exception_functions () const
 Functions found in the Exception table directory.
 
it_exceptions exceptions ()
 Iterator over the exception (_RUNTIME_FUNCTION) functions.
 
it_const_exceptions exceptions () const
 
ExceptionInfofind_exception_at (uint32_t rva)
 Try to find the exception info at the given RVA.
 
const ExceptionInfofind_exception_at (uint32_t rva) const
 
bool is_arm64ec () const
 True if this binary is compiled in ARM64EC mode (emulation compatible)
 
bool is_arm64x () const
 True if this binary is compiled in ARM64X mode (contains both ARM64 and ARM64EC code)
 
const Binarynested_pe_binary () const
 If the current binary contains dynamic relocations (e.g. LIEF::PE::DynamicFixupARM64X), this function returns the relocated view of the current PE.
 
Binarynested_pe_binary ()
 
std::ostream & print (std::ostream &os) const override
 
- 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.
 
virtual result< uint64_t > get_function_address (const std::string &func_name) const
 Return the address of the given function name.
 
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)
 Assemble and patch the provided assembly code at the specified address.
 
- Public Member Functions inherited from LIEF::Object
 Object ()
 
 Object (const Object &other)
 
Objectoperator= (const Object &other)
 
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)
 

Detailed Description

Class which represents a PE binary This is the main interface to manage and modify a PE executable.

Member Typedef Documentation

◆ data_directories_t

using LIEF::PE::Binary::data_directories_t = std::vector<std::unique_ptr<DataDirectory>>

Internal container for storing PE's DataDirectory.

◆ debug_entries_t

using LIEF::PE::Binary::debug_entries_t = std::vector<std::unique_ptr<Debug>>

Internal container for storing Debug information.

◆ delay_imports_t

Internal container for storing PE's DelayImport.

◆ exceptions_t

using LIEF::PE::Binary::exceptions_t = std::vector<std::unique_ptr<ExceptionInfo>>

Internal container for storing runtime function associated with exceptions.

◆ imports_t

using LIEF::PE::Binary::imports_t = std::vector<Import>

Internal container for storing PE's Import.

◆ it_const_data_directories

◆ it_const_debug_entries

Iterator that outputs const Debug&.

◆ it_const_delay_imports

◆ it_const_exceptions

◆ it_const_imports

Iterator that outputs const Import&.

◆ it_const_relocations

Iterator that outputs const Relocation&.

◆ it_const_sections

Iterator that outputs const Section& object.

◆ it_const_signatures

Iterator that outputs const Signature&.

◆ it_const_strings_table

Iterator that outputs const std::string&.

◆ it_const_symbols

Iterator that outputs const Symbol&.

◆ it_data_directories

◆ it_debug_entries

◆ it_delay_imports

◆ it_exceptions

◆ it_imports

Iterator that output Import&.

◆ it_relocations

◆ it_sections

Iterator that outputs Section& object.

◆ it_signatures

◆ it_strings_table

Iterator that outputs std::string&.

◆ it_symbols

Iterator that outputs Symbol&.

◆ relocations_t

using LIEF::PE::Binary::relocations_t = std::vector<std::unique_ptr<Relocation>>

Internal container for storing PE's Relocation.

◆ sections_t

using LIEF::PE::Binary::sections_t = std::vector<std::unique_ptr<Section>>

Internal container for storing PE's Section.

◆ signatures_t

Internal container for storing PE's authenticode Signature.

◆ strings_table_t

Internal container for storing strings.

◆ symbols_t

using LIEF::PE::Binary::symbols_t = std::vector<std::unique_ptr<Symbol>>

Internal container for storing COFF Symbols.

Constructor & Destructor Documentation

◆ Binary()

LIEF::PE::Binary::Binary ( )

◆ ~Binary()

LIEF::PE::Binary::~Binary ( )
override

Member Function Documentation

◆ accept()

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

Method so that a visitor can visit us.

Reimplemented from LIEF::Binary.

◆ add_debug_info()

Debug * LIEF::PE::Binary::add_debug_info ( const Debug & entry)

Add a new debug entry.

◆ add_import()

Import & LIEF::PE::Binary::add_import ( const std::string & name)
inline

Add an imported library (i.e. DLL) to the binary.

◆ add_relocation()

Relocation & LIEF::PE::Binary::add_relocation ( const Relocation & relocation)

Add a new PE Relocation.

◆ add_section()

Section * LIEF::PE::Binary::add_section ( const Section & section)

Add a section to the binary and return the section added.

◆ authentihash()

std::vector< uint8_t > LIEF::PE::Binary::authentihash ( ALGORITHMS algo) const

Compute the authentihash according to the algorithm provided in the first parameter.

◆ cert_dir() [1/2]

DataDirectory * LIEF::PE::Binary::cert_dir ( )
inline

Return the data directory associated with the certificate table (authenticode)

◆ cert_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::cert_dir ( ) const
inline

◆ classof()

static bool LIEF::PE::Binary::classof ( const LIEF::Binary * bin)
inlinestatic

◆ clear_debug()

bool LIEF::PE::Binary::clear_debug ( )

Remove all debug info from the binary.

◆ codeview_pdb()

const CodeViewPDB * LIEF::PE::Binary::codeview_pdb ( ) const

Return the CodeViewPDB object if present.

◆ coff_string_table() [1/2]

it_strings_table LIEF::PE::Binary::coff_string_table ( )
inline

◆ coff_string_table() [2/2]

it_const_strings_table LIEF::PE::Binary::coff_string_table ( ) const
inline

Iterator over the strings located in the COFF string table.

◆ compute_checksum()

uint32_t LIEF::PE::Binary::compute_checksum ( ) const

Re-compute the value of OptionalHeader::checksum. If both values do not match, it could mean that the binary has been modified after the compilation.

This value is computed by LIEF for the current binary object.

◆ ctor_functions()

LIEF::Binary::functions_t LIEF::PE::Binary::ctor_functions ( ) const
overridevirtual

Return the list of the binary constructors.

In a PE file, we consider a constructors as a callback in the TLS object

Implements LIEF::Binary.

◆ data_directories() [1/2]

it_data_directories LIEF::PE::Binary::data_directories ( )
inline

Return an iterator over the DataDirectory present in the Binary.

◆ data_directories() [2/2]

it_const_data_directories LIEF::PE::Binary::data_directories ( ) const
inline

◆ data_directory() [1/2]

DataDirectory * LIEF::PE::Binary::data_directory ( DataDirectory::TYPES type)
inline

Return the DataDirectory with the given type (or index)

◆ data_directory() [2/2]

const DataDirectory * LIEF::PE::Binary::data_directory ( DataDirectory::TYPES type) const

◆ debug() [1/2]

it_debug_entries LIEF::PE::Binary::debug ( )
inline

Return an iterator over the Debug entries.

◆ debug() [2/2]

it_const_debug_entries LIEF::PE::Binary::debug ( ) const
inline

◆ debug_dir() [1/2]

DataDirectory * LIEF::PE::Binary::debug_dir ( )
inline

Return the data directory associated with the debug table.

◆ debug_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::debug_dir ( ) const
inline

◆ delay_dir() [1/2]

DataDirectory * LIEF::PE::Binary::delay_dir ( )
inline

Return the data directory associated with delayed imports.

◆ delay_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::delay_dir ( ) const
inline

◆ delay_imports() [1/2]

it_delay_imports LIEF::PE::Binary::delay_imports ( )
inline

Return an iterator over the binary's delay imports.

◆ delay_imports() [2/2]

it_const_delay_imports LIEF::PE::Binary::delay_imports ( ) const
inline

◆ dos_header() [1/2]

DosHeader & LIEF::PE::Binary::dos_header ( )
inline

Return a reference to the PE::DosHeader object.

◆ dos_header() [2/2]

const DosHeader & LIEF::PE::Binary::dos_header ( ) const
inline

◆ dos_stub() [1/3]

span< uint8_t > LIEF::PE::Binary::dos_stub ( )
inline

◆ dos_stub() [2/3]

span< const uint8_t > LIEF::PE::Binary::dos_stub ( ) const
inline

Return the DOS stub content.

◆ dos_stub() [3/3]

void LIEF::PE::Binary::dos_stub ( std::vector< uint8_t > content)
inline

Update the DOS stub content.

◆ entrypoint()

uint64_t LIEF::PE::Binary::entrypoint ( ) const
inlineoverridevirtual

Return the binary's entrypoint (It is the same value as OptionalHeader::addressof_entrypoint.

Implements LIEF::Binary.

◆ exception_functions()

LIEF::Binary::functions_t LIEF::PE::Binary::exception_functions ( ) const

Functions found in the Exception table directory.

◆ exceptions() [1/2]

it_exceptions LIEF::PE::Binary::exceptions ( )
inline

Iterator over the exception (_RUNTIME_FUNCTION) functions.

Warning
This function requires that the option LIEF::PE::ParserConfig::parse_exceptions was turned on (default is false) when parsing the binary

◆ exceptions() [2/2]

it_const_exceptions LIEF::PE::Binary::exceptions ( ) const
inline

◆ exceptions_dir() [1/2]

DataDirectory * LIEF::PE::Binary::exceptions_dir ( )
inline

Return the data directory associated with the exceptions.

◆ exceptions_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::exceptions_dir ( ) const
inline

◆ export_dir() [1/2]

DataDirectory * LIEF::PE::Binary::export_dir ( )
inline

Return the data directory associated with the export table.

◆ export_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::export_dir ( ) const
inline

◆ fill_address()

void LIEF::PE::Binary::fill_address ( uint64_t address,
size_t size,
uint8_t value = 0,
VA_TYPES addr_type = VA_TYPES::AUTO )

Fill the content at the provided with a fixed value.

◆ find_coff_string() [1/2]

COFFString * LIEF::PE::Binary::find_coff_string ( uint32_t offset)
inline

Try to find the COFF string at the given offset in the COFF string table.

Warning
This offset must include the first 4 bytes holding the size of the table. Hence, the first string starts a the offset 4.

◆ find_coff_string() [2/2]

const COFFString * LIEF::PE::Binary::find_coff_string ( uint32_t offset) const
inline

◆ find_exception_at() [1/2]

ExceptionInfo * LIEF::PE::Binary::find_exception_at ( uint32_t rva)

Try to find the exception info at the given RVA.

Warning
This function requires that the option LIEF::PE::ParserConfig::parse_exceptions was turned on (default is false) when parsing the binary

◆ find_exception_at() [2/2]

const ExceptionInfo * LIEF::PE::Binary::find_exception_at ( uint32_t rva) const
inline

◆ functions()

LIEF::Binary::functions_t LIEF::PE::Binary::functions ( ) const

All functions found in the binary

◆ get_content_from_virtual_address()

span< const uint8_t > LIEF::PE::Binary::get_content_from_virtual_address ( uint64_t virtual_address,
uint64_t size,
Binary::VA_TYPES addr_type = Binary::VA_TYPES::AUTO ) const
overridevirtual

Return the content located at the provided virtual address.

Parameters
[in]virtual_addressVirtual address of the data to retrieve
[in]sizeSize in bytes of the data to retrieve
[in]addr_typeType of the Virtual address: VA or RVA. Default: Auto

Implements LIEF::Binary.

◆ get_delay_import() [1/2]

DelayImport * LIEF::PE::Binary::get_delay_import ( const std::string & import_name)
inline

Returns the DelayImport matching the given name. If it can't be found, it returns a nullptr.

◆ get_delay_import() [2/2]

const DelayImport * LIEF::PE::Binary::get_delay_import ( const std::string & import_name) const

◆ get_export() [1/2]

Export * LIEF::PE::Binary::get_export ( )
inline

Return the Export object.

◆ get_export() [2/2]

const Export * LIEF::PE::Binary::get_export ( ) const
inline

◆ get_import() [1/2]

Import * LIEF::PE::Binary::get_import ( const std::string & import_name)
inline

Return the Import matching the provided name (case sensitive)

If the import can't be found, it returns a nullptr

◆ get_import() [2/2]

const Import * LIEF::PE::Binary::get_import ( const std::string & import_name) const

◆ get_section() [1/2]

Section * LIEF::PE::Binary::get_section ( const std::string & name)
inline

Return binary's section from its name. If the secion can't be found, return a nullptr.

Parameters
[in]nameName of the Section

◆ get_section() [2/2]

const Section * LIEF::PE::Binary::get_section ( const std::string & name) const

◆ has()

bool LIEF::PE::Binary::has ( DataDirectory::TYPES type) const
inline

Check if the current binary has the given DataDirectory::TYPES.

◆ has_configuration()

bool LIEF::PE::Binary::has_configuration ( ) const
inline

Check if the current binary has a load configuration.

◆ has_debug()

bool LIEF::PE::Binary::has_debug ( ) const
inline

Check if the current binary contains debug information.

◆ has_delay_import()

bool LIEF::PE::Binary::has_delay_import ( const std::string & import_name) const
inline

True if the binary delay-imports the given library name

◆ has_delay_imports()

bool LIEF::PE::Binary::has_delay_imports ( ) const
inline

Check if the current binary contains delay imports.

◆ has_exceptions()

bool LIEF::PE::Binary::has_exceptions ( ) const
inline

Check if the current binary has exceptions.

◆ has_exports()

bool LIEF::PE::Binary::has_exports ( ) const
inline

Check if the current binary has exports.

See also
Export

◆ has_import()

bool LIEF::PE::Binary::has_import ( const std::string & import_name) const
inline

True if the binary imports the given library name

◆ has_imports()

bool LIEF::PE::Binary::has_imports ( ) const
inline

Check if the current binary contains imports.

See also
Import

◆ has_nx()

bool LIEF::PE::Binary::has_nx ( ) const
inlineoverridevirtual

Check if the binary uses NX protection.

Implements LIEF::Binary.

◆ has_relocations()

bool LIEF::PE::Binary::has_relocations ( ) const
inline

Check if the current binary has relocations.

See also
Relocation

◆ has_resources()

bool LIEF::PE::Binary::has_resources ( ) const
inline

Check if the current binary has resources.

◆ has_rich_header()

bool LIEF::PE::Binary::has_rich_header ( ) const
inline

Check if the current binary has a RichHeader object.

◆ has_signatures()

bool LIEF::PE::Binary::has_signatures ( ) const
inline

Check if the current binary contains signatures.

See also
signatures

◆ has_tls()

bool LIEF::PE::Binary::has_tls ( ) const
inline

Check if the current binary has a TLS object.

◆ header() [1/2]

Header & LIEF::PE::Binary::header ( )
inline

Return a reference to the PE::Header object.

◆ header() [2/2]

const Header & LIEF::PE::Binary::header ( ) const
inline

◆ iat_dir() [1/2]

DataDirectory * LIEF::PE::Binary::iat_dir ( )
inline

Return the data directory associated with the IAT.

◆ iat_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::iat_dir ( ) const
inline

◆ imagebase()

uint64_t LIEF::PE::Binary::imagebase ( ) const
inlineoverridevirtual

Return binary's imagebase. 0 if not relevant.

The value is the same as those returned by OptionalHeader::imagebase

Implements LIEF::Binary.

◆ import_dir() [1/2]

DataDirectory * LIEF::PE::Binary::import_dir ( )
inline

Return the data directory associated with the import table.

◆ import_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::import_dir ( ) const
inline

◆ import_section() [1/2]

Section * LIEF::PE::Binary::import_section ( )
inline

◆ import_section() [2/2]

const Section * LIEF::PE::Binary::import_section ( ) const

Return the section associated with import table or a nullptr if the binary does not have an import table.

◆ imports() [1/2]

it_imports LIEF::PE::Binary::imports ( )
inline

Return an iterator over the binary imports.

◆ imports() [2/2]

it_const_imports LIEF::PE::Binary::imports ( ) const
inline

◆ is_arm64ec()

bool LIEF::PE::Binary::is_arm64ec ( ) const

True if this binary is compiled in ARM64EC mode (emulation compatible)

◆ is_arm64x()

bool LIEF::PE::Binary::is_arm64x ( ) const

True if this binary is compiled in ARM64X mode (contains both ARM64 and ARM64EC code)

◆ is_pie()

bool LIEF::PE::Binary::is_pie ( ) const
inlineoverridevirtual

Check if the binary is position independent.

Implements LIEF::Binary.

◆ is_reproducible_build()

bool LIEF::PE::Binary::is_reproducible_build ( ) const

Check if the current binary is reproducible build, replacing timestamps by a compile hash.

See also
Repro

◆ last_section_offset()

uint64_t LIEF::PE::Binary::last_section_offset ( ) const

◆ load_config_dir() [1/2]

DataDirectory * LIEF::PE::Binary::load_config_dir ( )
inline

Return the data directory associated with the load config.

◆ load_config_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::load_config_dir ( ) const
inline

◆ load_configuration() [1/2]

LoadConfiguration * LIEF::PE::Binary::load_configuration ( )
inline

◆ load_configuration() [2/2]

const LoadConfiguration * LIEF::PE::Binary::load_configuration ( ) const
inline

Retrun the LoadConfiguration object or a nullptr if the binary does not use the LoadConfiguration.

◆ nested_pe_binary() [1/2]

Binary * LIEF::PE::Binary::nested_pe_binary ( )
inline

◆ nested_pe_binary() [2/2]

const Binary * LIEF::PE::Binary::nested_pe_binary ( ) const
inline

If the current binary contains dynamic relocations (e.g. LIEF::PE::DynamicFixupARM64X), this function returns the relocated view of the current PE.

This can be used to get the alternative PE binary, targeting a different architectures.

Warning
This function requires that the option LIEF::PE::ParserConfig::parse_arm64x_binary was turned on (default is false) when parsing the binary

◆ offset_to_virtual_address()

result< uint64_t > LIEF::PE::Binary::offset_to_virtual_address ( uint64_t offset,
uint64_t slide = 0 ) const
overridevirtual

Convert the given offset into a virtual address.

Parameters
[in]offsetThe offset to convert.
[in]slideIf not 0, it will replace the default base address (if any)

Implements LIEF::Binary.

◆ optional_header() [1/2]

OptionalHeader & LIEF::PE::Binary::optional_header ( )
inline

Header that follows the header(). It is named optional from the COFF specfication but it is mandatory in a PE file.

◆ optional_header() [2/2]

const OptionalHeader & LIEF::PE::Binary::optional_header ( ) const
inline

◆ overlay() [1/2]

span< uint8_t > LIEF::PE::Binary::overlay ( )
inline

◆ overlay() [2/2]

span< const uint8_t > LIEF::PE::Binary::overlay ( ) const
inline

Return the overlay content.

◆ overlay_offset()

uint64_t LIEF::PE::Binary::overlay_offset ( ) const
inline

Return the original overlay offset.

◆ patch_address() [1/2]

void LIEF::PE::Binary::patch_address ( uint64_t address,
const std::vector< uint8_t > & patch_value,
VA_TYPES addr_type = VA_TYPES::AUTO )
overridevirtual

Patch the content at virtual address address with patch_value.

Parameters
[in]addressAddress to patch
[in]patch_valuePatch to apply
[in]addr_typeType of the Virtual address: VA or RVA. Default: Auto

Implements LIEF::Binary.

◆ patch_address() [2/2]

void LIEF::PE::Binary::patch_address ( uint64_t address,
uint64_t patch_value,
size_t size = sizeof(uint64_t),
VA_TYPES addr_type = VA_TYPES::AUTO )
overridevirtual

Patch the address with the given value.

Parameters
[in]addressAddress to patch
[in]patch_valuePatch to apply
[in]sizeSize of the value in bytes (1, 2, ... 8)
[in]addr_typeType of the Virtual address: VA or RVA. Default: Auto

Implements LIEF::Binary.

◆ print()

std::ostream & LIEF::PE::Binary::print ( std::ostream & os) const
overridevirtual

Reimplemented from LIEF::Binary.

◆ relocation_dir() [1/2]

DataDirectory * LIEF::PE::Binary::relocation_dir ( )
inline

Return the data directory associated with the relocation table.

◆ relocation_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::relocation_dir ( ) const
inline

◆ relocations() [1/2]

it_relocations LIEF::PE::Binary::relocations ( )
inline

Return an iterator over the PE's Relocation.

◆ relocations() [2/2]

it_const_relocations LIEF::PE::Binary::relocations ( ) const
inline

◆ remove()

void LIEF::PE::Binary::remove ( const Section & section,
bool clear = false )

Remove the given section.

See also
remove_section

◆ remove_all_imports()

void LIEF::PE::Binary::remove_all_imports ( )
inline

Remove all libraries in the binary.

◆ remove_all_relocations()

void LIEF::PE::Binary::remove_all_relocations ( )

Remove all the relocations.

◆ remove_debug()

bool LIEF::PE::Binary::remove_debug ( const Debug & entry)

Remove a specific debug entry.

◆ remove_import()

bool LIEF::PE::Binary::remove_import ( const std::string & name)

Remove the imported library with the given name

Return true if the deletion succeed, false otherwise.

◆ remove_section()

void LIEF::PE::Binary::remove_section ( const std::string & name,
bool clear = false )
overridevirtual

Delete the section with the given name.

Parameters
[in]nameName of section to delete
[in]clearif true clear the section's content with 0 before removing (default: false)

Implements LIEF::Binary.

◆ remove_tls()

void LIEF::PE::Binary::remove_tls ( )

Remove the TLS from the binary.

◆ resources() [1/2]

ResourceNode * LIEF::PE::Binary::resources ( )
inline

Return resources as a tree or a nullptr if there is no resources.

◆ resources() [2/2]

const ResourceNode * LIEF::PE::Binary::resources ( ) const
inline

◆ resources_manager()

result< ResourcesManager > LIEF::PE::Binary::resources_manager ( ) const

Return the ResourcesManager (class to manage resources more easily than the tree one)

◆ rich_header() [1/3]

RichHeader * LIEF::PE::Binary::rich_header ( )
inline

Return a reference to the RichHeader object.

◆ rich_header() [2/3]

const RichHeader * LIEF::PE::Binary::rich_header ( ) const
inline

◆ rich_header() [3/3]

void LIEF::PE::Binary::rich_header ( const RichHeader & rich_header)

Set a RichHeader object in the current Binary.

◆ rsrc_dir() [1/2]

DataDirectory * LIEF::PE::Binary::rsrc_dir ( )
inline

Return the data directory associated with the resources tree.

◆ rsrc_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::rsrc_dir ( ) const
inline

◆ rva_to_offset()

uint64_t LIEF::PE::Binary::rva_to_offset ( uint64_t RVA) const

Convert a Relative Virtual Address into an offset.

The conversion is performed by looking for the section that encompasses the provided RVA.

◆ section_from_offset() [1/2]

Section * LIEF::PE::Binary::section_from_offset ( uint64_t offset)
inline

Find the section associated that encompasses the given offset.

If no section can be found, return a nullptr

◆ section_from_offset() [2/2]

const Section * LIEF::PE::Binary::section_from_offset ( uint64_t offset) const

◆ section_from_rva() [1/2]

Section * LIEF::PE::Binary::section_from_rva ( uint64_t virtual_address)
inline

Find the section associated that encompasses the given RVA.

If no section can be found, return a nullptr

◆ section_from_rva() [2/2]

const Section * LIEF::PE::Binary::section_from_rva ( uint64_t virtual_address) const

◆ sections() [1/2]

it_sections LIEF::PE::Binary::sections ( )
inline

Return an iterator over the PE's Section.

◆ sections() [2/2]

it_const_sections LIEF::PE::Binary::sections ( ) const
inline

◆ set_export()

Export & LIEF::PE::Binary::set_export ( const Export & export_table)

◆ set_resources() [1/2]

ResourceNode * LIEF::PE::Binary::set_resources ( const ResourceNode & root)

Change or set the current resource tree with the new one provided in parameter.

◆ set_resources() [2/2]

ResourceNode * LIEF::PE::Binary::set_resources ( std::unique_ptr< ResourceNode > root)

◆ signatures() [1/2]

it_signatures LIEF::PE::Binary::signatures ( )
inline

◆ signatures() [2/2]

it_const_signatures LIEF::PE::Binary::signatures ( ) const
inline

Return an iterator over the Signature object(s) if the binary is signed.

◆ sizeof_headers()

uint32_t LIEF::PE::Binary::sizeof_headers ( ) const

Compute the size of all the headers.

◆ symbols() [1/2]

it_symbols LIEF::PE::Binary::symbols ( )
inline

Return binary Symbols.

◆ symbols() [2/2]

it_const_symbols LIEF::PE::Binary::symbols ( ) const
inline

◆ tls() [1/3]

TLS * LIEF::PE::Binary::tls ( )
inline

Return a reference to the TLS object.

◆ tls() [2/3]

const TLS * LIEF::PE::Binary::tls ( ) const
inline

◆ tls() [3/3]

TLS & LIEF::PE::Binary::tls ( const TLS & tls)

Set a TLS object in the current Binary.

◆ tls_dir() [1/2]

DataDirectory * LIEF::PE::Binary::tls_dir ( )
inline

Return the data directory associated with TLS.

◆ tls_dir() [2/2]

const DataDirectory * LIEF::PE::Binary::tls_dir ( ) const
inline

◆ type()

PE_TYPE LIEF::PE::Binary::type ( ) const
inline

Return PE32 or PE32+

◆ va_to_offset()

uint64_t LIEF::PE::Binary::va_to_offset ( uint64_t VA) const
inline

Convert the absolute virtual address into an offset.

See also
rva_to_offset

◆ verify_signature() [1/2]

Signature::VERIFICATION_FLAGS LIEF::PE::Binary::verify_signature ( const Signature & sig,
Signature::VERIFICATION_CHECKS checks = Signature::VERIFICATION_CHECKS::DEFAULT ) const

Verify the binary with the Signature object provided in the first parameter. It can be used to verify a detached signature:

if (detached) {
binary->verify_signature(detached.value());
}
static result< Signature > parse(std::vector< uint8_t > data, bool skip_header=false)
Parse a PKCS #7 signature given a raw blob.
tl::expected< T, lief_errors > result
Wrapper that contains an Object (T) or an error.
Definition errors.hpp:75

◆ verify_signature() [2/2]

Verify the binary against the embedded signature(s) (if any) First, it checks that the embedded signatures are correct (c.f. Signature::check) and then, it checks that the authentihash matches ContentInfo::digest.

One can tweak the verification process with the Signature::VERIFICATION_CHECKS flags

See also
LIEF::PE::Signature::check

◆ virtual_size()

uint64_t LIEF::PE::Binary::virtual_size ( ) const

Compute the binary's virtual size. It should match OptionalHeader::sizeof_image.

◆ write() [1/4]

std::unique_ptr< Builder > LIEF::PE::Binary::write ( const std::string & filename)
inline

Reconstruct the binary object and write the raw PE in filename

◆ write() [2/4]

std::unique_ptr< Builder > LIEF::PE::Binary::write ( const std::string & filename,
const Builder::config_t & config )

Reconstruct the binary object with the given configuration and write it in filename

◆ write() [3/4]

std::unique_ptr< Builder > LIEF::PE::Binary::write ( std::ostream & os)
inline

Reconstruct the binary object and write the raw PE in os stream.

Rebuild a PE binary from the current Binary object. When rebuilding, import table and relocations are not rebuilt.

◆ write() [4/4]

std::unique_ptr< Builder > LIEF::PE::Binary::write ( std::ostream & os,
const Builder::config_t & config )

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