LIEF: Library to Instrument Executable Formats Version 2.0.0
Loading...
Searching...
No Matches
OAT/Header.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_OAT_HEADER_H
17#define LIEF_OAT_HEADER_H
18#include <array>
19#include <map>
20#include <string>
21#include <vector>
22
23#include "LIEF/OAT/enums.hpp"
25#include "LIEF/iterators.hpp"
26
27#include "LIEF/Object.hpp"
28#include "LIEF/visibility.h"
29
30
31namespace LIEF::OAT {
32class Parser;
33
34class LIEF_API Header : public Object {
35 friend class Parser;
36
37 public:
38 struct element_t {
39 element_t(HEADER_KEYS key, const std::string& value) :
40 key(key),
41 value(const_cast<std::string*>(&value)) {}
42
44 std::string* value = nullptr;
45 };
46 using magic_t = std::array<uint8_t, 4>; // oat\n
47 using key_values_t = std::map<HEADER_KEYS, std::string>;
50
52 using keys_t = std::vector<HEADER_KEYS>;
53 using values_t = std::vector<std::string>;
54
55 public:
57 static std::string key_to_string(HEADER_KEYS key);
58
59 public:
61 Header(const Header&);
63
64 template<class T>
65 LIEF_LOCAL Header(const T* header);
66
69
72
73 uint32_t checksum() const;
74
76 // TODO instruction_set_features_bitmap_() const;
77
78
79 uint32_t nb_dex_files() const;
80
81 // Since OAT 131
82 uint32_t oat_dex_files_offset() const;
83
84 uint32_t executable_offset() const;
85 uint32_t i2i_bridge_offset() const;
86 uint32_t i2c_code_bridge_offset() const;
87 uint32_t jni_dlsym_lookup_offset() const;
88
93
94 int32_t image_patch_delta() const;
95
98
99 uint32_t key_value_size() const;
100
103
104 keys_t keys() const;
106
107 const std::string* get(HEADER_KEYS key) const LIEF_LIFETIMEBOUND;
109
110 Header& set(HEADER_KEYS key, const std::string& value) LIEF_LIFETIMEBOUND;
111
112 const std::string* operator[](HEADER_KEYS key) const;
113 std::string* operator[](HEADER_KEYS key);
114
115 void magic(const magic_t& magic);
116
117 void accept(Visitor& visitor) const override;
118
119
120 LIEF_API friend std::ostream& operator<<(std::ostream& os, const Header& hdr);
121
122 private:
123 magic_t magic_;
124 oat_version_t version_ = 0;
125 uint32_t checksum_ = 0;
127 uint32_t instruction_set_features_bitmap_ = 0;
128 uint32_t dex_file_count_ = 0;
129 uint32_t oat_dex_files_offset_ = 0; // Since OAT 131 / Android 8.1.0
130 uint32_t executable_offset_ = 0;
131 uint32_t i2i_bridge_offset_ = 0;
132 uint32_t i2c_code_bridge_offset_ = 0;
133 uint32_t jni_dlsym_lookup_offset_ = 0;
134
135 uint32_t quick_generic_jni_trampoline_offset_ = 0;
136 uint32_t quick_imt_conflict_trampoline_offset_ = 0;
137 uint32_t quick_resolution_trampoline_offset_ = 0;
138 uint32_t quick_to_interpreter_bridge_offset_ = 0;
139
140 int32_t image_patch_delta_ = 0;
141
142 uint32_t image_file_location_oat_checksum_ = 0;
143 uint32_t image_file_location_oat_data_begin_ = 0;
144
145 uint32_t key_value_store_size_ = 0;
146
147 key_values_t dex2oat_context_;
148};
149
150}
151
152
153#endif
uint32_t image_file_location_oat_checksum() const
uint32_t image_file_location_oat_data_begin() const
int32_t image_patch_delta() const
uint32_t nb_dex_files() const
INSTRUCTION_SETS instruction_set() const
Header::magic_t magic() const
Magic value: oat.
ref_iterator< std::vector< element_t > > it_key_values_t
Definition OAT/Header.hpp:48
std::array< uint8_t, 4 > magic_t
Definition OAT/Header.hpp:46
uint32_t jni_dlsym_lookup_offset() const
uint32_t i2i_bridge_offset() const
uint32_t quick_resolution_trampoline_offset() const
uint32_t checksum() const
uint32_t i2c_code_bridge_offset() const
it_key_values_t key_values()
Header(const T *header)
void accept(Visitor &visitor) const override
oat_version_t version() const
OAT version.
static std::string key_to_string(HEADER_KEYS key)
Return the string value associated with the given key.
uint32_t quick_imt_conflict_trampoline_offset() const
Header & operator=(const Header &)
uint32_t oat_dex_files_offset() const
uint32_t key_value_size() const
uint32_t quick_to_interpreter_bridge_offset() const
std::vector< HEADER_KEYS > keys_t
Iterator type over.
Definition OAT/Header.hpp:52
values_t values() const
friend class Parser
Definition OAT/Header.hpp:35
const std::string * get(HEADER_KEYS key) const
std::vector< std::string > values_t
Definition OAT/Header.hpp:53
uint32_t quick_generic_jni_trampoline_offset() const
uint32_t executable_offset() const
Header & set(HEADER_KEYS key, const std::string &value)
keys_t keys() const
Header(const Header &)
std::map< HEADER_KEYS, std::string > key_values_t
Definition OAT/Header.hpp:47
const_ref_iterator< std::vector< element_t > > it_const_key_values_t
Definition OAT/Header.hpp:49
Class to parse an OAT file to produce an OAT::Binary.
Definition OAT/Parser.hpp:40
Definition Visitor.hpp:212
Iterator which returns reference on container's values.
Definition iterators.hpp:47
#define LIEF_LIFETIMEBOUND
Definition compiler_attributes.hpp:72
Definition ELF/Parser.hpp:32
HEADER_KEYS
Definition OAT/enums.hpp:51
INSTRUCTION_SETS
Definition OAT/enums.hpp:66
@ INST_SET_NONE
Definition OAT/enums.hpp:67
uint32_t oat_version_t
Definition OAT/type_traits.hpp:22
ref_iterator< CT, U, typename decay_t< CT >::const_iterator > const_ref_iterator
Iterator which returns a const ref on container's values.
Definition iterators.hpp:316
element_t(HEADER_KEYS key, const std::string &value)
Definition OAT/Header.hpp:39
HEADER_KEYS key
Definition OAT/Header.hpp:43
std::string * value
Definition OAT/Header.hpp:44
#define LIEF_API
Definition visibility.h:45
#define LIEF_LOCAL
Definition visibility.h:46