16#ifndef LIEF_COFF_BINARY_H
17#define LIEF_COFF_BINARY_H
28#include <unordered_map>
49 using sections_t = std::vector<std::unique_ptr<Section>>;
77 using symbols_t = std::vector<std::unique_ptr<Symbol>>;
132 return strings_table_;
136 return strings_table_;
144 auto it = std::find_if(strings_table_.begin(), strings_table_.end(),
145 [offset](
const String& item) {
146 return offset == item.offset();
148 return it == strings_table_.end() ? nullptr : &*it;
152 return const_cast<Binary*
>(
this)->
find_string(offset);
164 return const_cast<Symbol*
>(
165 static_cast<const Binary*
>(
this)->find_function(name)
173 return const_cast<Symbol*
>(
174 static_cast<const Binary*
>(
this)->find_demangled_function(name)
208 uint64_t address = 0)
const;
216 uint64_t address = 0)
const {
217 return disassemble(buffer.data(), buffer.size(), address);
221 uint64_t address = 0)
const {
222 return disassemble(buffer.data(), buffer.size(), address);
226 uint64_t address = 0)
const {
227 return disassemble(buffer.data(), buffer.size(), address);
241 std::unique_ptr<Header> header_;
247 mutable std::unordered_map<uint32_t, std::unique_ptr<assembly::Engine>> engines_;
251 template<u
int32_t Key,
class F>
std::vector< std::unique_ptr< Symbol > > symbols_t
Internal container used to store COFF's symbols.
Definition COFF/Binary.hpp:77
ref_iterator< relocations_t &, Relocation * > it_relocations
Iterator that outputs Relocation& object.
Definition COFF/Binary.hpp:61
const Header & header() const
The COFF header.
Definition COFF/Binary.hpp:95
it_symbols symbols()
Iterator over the COFF's symbols.
Definition COFF/Binary.hpp:122
const_ref_iterator< const relocations_t &, const Relocation * > it_const_relocations
Iterator that outputs const Relocation& object.
Definition COFF/Binary.hpp:64
const String * find_string(uint32_t offset) const
Definition COFF/Binary.hpp:151
iterator_range< assembly::Instruction::Iterator > instructions_it
Instruction iterator.
Definition COFF/Binary.hpp:86
instructions_it disassemble(LIEF::span< uint8_t > buffer, uint64_t address=0) const
Definition COFF/Binary.hpp:225
instructions_it disassemble(LIEF::span< const uint8_t > buffer, uint64_t address=0) const
Definition COFF/Binary.hpp:220
const_ref_iterator< const strings_table_t & > it_const_strings_table
Iterator that outputs const String& object.
Definition COFF/Binary.hpp:74
Symbol * find_function(const std::string &name)
Definition COFF/Binary.hpp:163
it_sections sections()
Iterator over the different sections located in this COFF binary.
Definition COFF/Binary.hpp:104
it_const_symbols symbols() const
Definition COFF/Binary.hpp:126
it_const_strings_table string_table() const
Iterator over the COFF's strings.
Definition COFF/Binary.hpp:131
ref_iterator< strings_table_t & > it_strings_table
Iterator that outputs String& object.
Definition COFF/Binary.hpp:71
Symbol * find_demangled_function(const std::string &name)
Definition COFF/Binary.hpp:172
filter_iterator< symbols_t &, Symbol * > it_functions
Iterator which outputs COFF symbols representing functions.
Definition COFF/Binary.hpp:89
const_filter_iterator< const symbols_t &, const Symbol * > it_const_function
Iterator which outputs COFF symbols representing functions.
Definition COFF/Binary.hpp:92
ref_iterator< symbols_t &, Symbol * > it_symbols
Iterator that outputs Symbol& object.
Definition COFF/Binary.hpp:80
const_ref_iterator< const sections_t &, const Section * > it_const_sections
Iterator that outputs const Section& object.
Definition COFF/Binary.hpp:55
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.
const_ref_iterator< const symbols_t &, const Symbol * > it_const_symbols
Iterator that outputs Symbol& object.
Definition COFF/Binary.hpp:83
it_strings_table string_table()
Definition COFF/Binary.hpp:135
it_const_relocations relocations() const
Definition COFF/Binary.hpp:117
it_const_function functions() const
Iterator over the functions implemented in this COFF.
const Symbol * find_demangled_function(const std::string &name) const
Try to find the function (symbol) with the given demangled name.
friend class Parser
Definition COFF/Binary.hpp:46
std::string to_string() const
it_const_sections sections() const
Definition COFF/Binary.hpp:108
Header & header()
Definition COFF/Binary.hpp:99
ref_iterator< sections_t &, Section * > it_sections
Iterator that outputs Section& object.
Definition COFF/Binary.hpp:52
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.
Definition COFF/Binary.hpp:215
String * find_string(uint32_t offset)
Try to find the COFF string at the given offset in the COFF string table.
Definition COFF/Binary.hpp:143
instructions_it disassemble(const Symbol &symbol) const
Disassemble code for the given symbol.
std::vector< String > strings_table_t
Internal container used to store COFF's strings.
Definition COFF/Binary.hpp:68
std::vector< std::unique_ptr< Relocation > > relocations_t
Internal container used to store COFF's relocations.
Definition COFF/Binary.hpp:58
const Symbol * find_function(const std::string &name) const
Try to find the function (symbol) with the given name.
instructions_it disassemble(const std::string &symbol) const
Disassemble code for the given symbol name.
friend std::ostream & operator<<(std::ostream &os, const Binary &bin)
Definition COFF/Binary.hpp:232
std::vector< std::unique_ptr< Section > > sections_t
Internal container used to store COFF's section.
Definition COFF/Binary.hpp:49
it_relocations relocations()
Iterator over all the relocations used by this COFF binary.
Definition COFF/Binary.hpp:113
Definition COFF/Parser.hpp:35
This class represents a COFF relocation.
Definition COFF/Relocation.hpp:34
This class represents a COFF section.
Definition COFF/Section.hpp:39
This class represents a string located in the COFF string table.
Definition String.hpp:34
This class represents a COFF symbol.
Definition COFF/Symbol.hpp:35
This class interfaces the assembler/disassembler support.
Definition Engine.hpp:36
Iterator which return a ref on container's values given predicates.
Definition iterators.hpp:293
Definition iterators.hpp:567
Iterator which returns reference on container's values.
Definition iterators.hpp:45
Definition AuxiliarySymbol.hpp:29
Namespace related to assembly/disassembly support.
Definition Abstract/Binary.hpp:47
LIEF namespace.
Definition Abstract/Binary.hpp:40
filter_iterator< CT, U, typename decay_t< CT >::const_iterator > const_filter_iterator
Iterator which return a const ref on container's values given predicates.
Definition iterators.hpp:559
tcb::span< ElementType, Extent > span
Definition span.hpp:22
ref_iterator< CT, U, typename decay_t< CT >::const_iterator > const_ref_iterator
Iterator which return const ref on container's values.
Definition iterators.hpp:286
#define LIEF_API
Definition visibility.h:43
#define LIEF_LOCAL
Definition visibility.h:44