16#ifndef LIEF_DEX_FILE_H
17#define LIEF_DEX_FILE_H
20#include "LIEF/visibility.h"
21#include "LIEF/Object.hpp"
23#include "LIEF/DEX/Header.hpp"
24#include "LIEF/DEX/MapList.hpp"
25#include "LIEF/DEX/instructions.hpp"
26#include "LIEF/DEX/deopt.hpp"
27#include "LIEF/DEX/types.hpp"
43 using classes_t = std::unordered_map<std::string, Class*>;
44 using classes_list_t = std::vector<std::unique_ptr<Class>>;
48 using methods_t = std::vector<std::unique_ptr<Method>>;
52 using strings_t = std::vector<std::unique_ptr<std::string>>;
56 using types_t = std::vector<std::unique_ptr<Type>>;
60 using prototypes_t = std::vector<std::unique_ptr<Prototype>>;
64 using fields_t = std::vector<std::unique_ptr<Field>>;
69 File& operator=(
const File& copy) =
delete;
76 const std::string&
name()
const;
78 void name(
const std::string& name);
82 void location(
const std::string& location);
93 bool has_class(
const std::string& class_name)
const;
98 Class* get_class(
const std::string& class_name);
103 Class* get_class(
size_t index);
136 std::string
save(
const std::string& path =
"",
bool deoptimize =
true)
const;
138 std::vector<uint8_t> raw(
bool deoptimize =
true)
const;
140 void accept(
Visitor& visitor)
const override;
145 LIEF_API
friend std::ostream& operator<<(std::ostream& os,
const File& file);
150 void add_class(std::unique_ptr<Class> cls);
152 static void deoptimize_nop(uint8_t* inst_ptr, uint32_t value);
153 static void deoptimize_return(uint8_t* inst_ptr, uint32_t value);
154 static void deoptimize_invoke_virtual(uint8_t* inst_ptr, uint32_t value, OPCODES new_inst);
155 static void deoptimize_instance_field_access(uint8_t* inst_ptr, uint32_t value, OPCODES new_inst);
158 std::string location_;
166 prototypes_t prototypes_;
169 classes_list_t class_list_;
170 std::vector<uint8_t> original_data_;
Class which represents a DEX Class (i.e. a Java/Kotlin class)
Definition DEX/Class.hpp:35
Class that represents a DEX file.
Definition DEX/File.hpp:39
it_const_methods methods() const
Return an iterator over all the DEX::Method used in this DEX file.
it_const_fields fields() const
Return an iterator over all the DEX::Field used in this DEX file.
std::string save(const std::string &path="", bool deoptimize=true) const
Extract the current dex file and deoptimize it.
it_const_types types() const
Type pool.
const Header & header() const
DEX header.
it_const_strings strings() const
String pool.
it_const_classes classes() const
All classes used in the DEX file
dex2dex_info_t dex2dex_info() const
De-optimize information.
const std::string & location() const
Location of this file.
const Class * get_class(const std::string &class_name) const
Return the DEX::Class object associated with the given name.
bool has_class(const std::string &class_name) const
Check if the given class name exists.
const Class * get_class(size_t index) const
Return the DEX::Class object associated with the given index.
const MapList & map() const
DEX Map.
it_prototypes prototypes()
Prototype pool.
const std::string & name() const
Name of this file.
std::string dex2dex_json_info() const
De-optimize information as JSON.
dex_version_t version() const
Version of the current DEX file.
Class which represents the map_list structure that follows the main DEX header.
Definition MapList.hpp:37
Class which parses a DEX file to produce a DEX::File object.
Definition DEX/Parser.hpp:38
Definition Visitor.hpp:219
Iterator which returns reference on container's values.
Definition iterators.hpp:48
LIEF namespace.
Definition Abstract/Binary.hpp:32