LIEF: Library to Instrument Executable Formats
Version 1.0.0
Toggle main menu visibility
Loading...
Searching...
No Matches
lief-install
x86_64
static
include
LIEF
COFF
COFF/Parser.hpp
Go to the documentation of this file.
1
/* Copyright 2017 - 2026 R. Thomas
2
* Copyright 2017 - 2026 Quarkslab
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
#ifndef LIEF_COFF_PARSER_H
17
#define LIEF_COFF_PARSER_H
18
#include <map>
19
#include "
LIEF/visibility.h
"
20
21
#include "
LIEF/BinaryStream/VectorStream.hpp
"
22
#include "
LIEF/BinaryStream/SpanStream.hpp
"
23
24
#include "
LIEF/COFF/ParserConfig.hpp
"
25
#include "
LIEF/COFF/Header.hpp
"
26
27
namespace
LIEF
{
28
namespace
COFF
{
29
class
Binary
;
30
class
Section
;
31
class
String
;
32
class
Symbol
;
33
34
class
Parser {
35
public
:
38
static
LIEF_API
39
std::unique_ptr<Binary>
parse
(std::unique_ptr<BinaryStream> stream,
40
const
ParserConfig
& config =
ParserConfig::default_conf
());
41
43
static
std::unique_ptr<Binary>
parse
(
const
std::string& file,
44
const
ParserConfig
& config =
ParserConfig::default_conf
())
45
{
46
if
(
auto
strm =
VectorStream::from_file
(file)) {
47
return
parse
(std::unique_ptr<VectorStream>(
new
VectorStream
(std::move(*strm))), config);
48
}
49
return
nullptr
;
50
}
51
53
struct
SymSec {
54
size_t
sec_idx = 0;
55
Symbol
* symbol =
nullptr
;
56
57
friend
bool
operator<(
const
SymSec& lhs,
const
SymSec& rhs) {
58
return
lhs.sec_idx < rhs.sec_idx;
59
}
60
61
friend
bool
operator==(
const
SymSec& lhs,
const
SymSec& rhs) {
62
return
lhs.sec_idx == rhs.sec_idx && lhs.symbol == rhs.symbol;
63
}
64
65
friend
bool
operator!=(
const
SymSec& lhs,
const
SymSec& rhs) {
66
return
!(lhs == rhs);
67
}
68
};
69
71
using
SymSecMap
= std::vector<SymSec>;
72
74
LIEF_LOCAL
void
memoize(
String
str);
75
77
LIEF_LOCAL
String
* find_coff_string(uint32_t offset)
const
;
78
79
~Parser
();
80
81
private
:
82
Parser(std::unique_ptr<BinaryStream> stream,
const
ParserConfig
& config,
83
Header::KIND
kind) :
84
stream_(std::move(stream)),
85
kind_(kind),
86
config_(config)
87
{}
88
89
ok_error_t
process();
90
ok_error_t
parse_header();
91
ok_error_t
parse_optional_header();
92
ok_error_t
parse_sections();
93
ok_error_t
parse_relocations(
Section
& section);
94
ok_error_t
parse_symbols();
95
ok_error_t
parse_string_table();
96
97
std::unique_ptr<BinaryStream> stream_;
98
std::unique_ptr<Binary> bin_;
99
Header::KIND
kind_ =
Header::KIND::UNKNOWN
;
100
101
std::map<uint32_t, size_t> memoize_coff_str_;
102
std::map<size_t, Symbol*> symbol_idx_;
103
SymSecMap
symsec_;
104
105
ParserConfig
config_;
106
};
107
}
108
}
109
#endif
Header.hpp
ParserConfig.hpp
SpanStream.hpp
VectorStream.hpp
LIEF::COFF::Binary
Class that represents a COFF Binary.
Definition
COFF/Binary.hpp:44
LIEF::COFF::Header::KIND
KIND
Definition
COFF/Header.hpp:36
LIEF::COFF::Header::KIND::UNKNOWN
@ UNKNOWN
Definition
COFF/Header.hpp:37
LIEF::COFF::ParserConfig
Class used to configure the COFF parser.
Definition
COFF/ParserConfig.hpp:24
LIEF::COFF::ParserConfig::default_conf
static const ParserConfig & default_conf()
Definition
COFF/ParserConfig.hpp:26
LIEF::COFF::Parser::~Parser
~Parser()
LIEF::COFF::Parser::parse
static std::unique_ptr< Binary > parse(std::unique_ptr< BinaryStream > stream, const ParserConfig &config=ParserConfig::default_conf())
Parse the COFF binary referenced by the stream argument with the given config.
LIEF::COFF::Parser::SymSecMap
std::vector< SymSec > SymSecMap
<=> std::unordered_multimap<section index, Symbol*>
Definition
COFF/Parser.hpp:71
LIEF::COFF::Parser::parse
static std::unique_ptr< Binary > parse(const std::string &file, const ParserConfig &config=ParserConfig::default_conf())
Parse the COFF binary pointed by the file argument with the given config.
Definition
COFF/Parser.hpp:43
LIEF::COFF::Section
This class represents a COFF section.
Definition
COFF/Section.hpp:39
LIEF::COFF::String
This class represents a string located in the COFF string table.
Definition
String.hpp:33
LIEF::COFF::Symbol
This class represents a COFF symbol.
Definition
COFF/Symbol.hpp:35
LIEF::VectorStream
Definition
VectorStream.hpp:29
LIEF::VectorStream::from_file
static result< VectorStream > from_file(const std::string &file)
LIEF::ok_error_t
Opaque structure that is used by LIEF to avoid writing result<void> f(...). Instead,...
Definition
errors.hpp:112
LIEF::COFF
Definition
AuxiliarySymbol.hpp:29
LIEF
LIEF namespace.
Definition
Abstract/Binary.hpp:40
visibility.h
LIEF_API
#define LIEF_API
Definition
visibility.h:41
LIEF_LOCAL
#define LIEF_LOCAL
Definition
visibility.h:42
Generated by
1.17.0