8#ifndef KUNAI_DEX_DVM_DVM_TYPES_HPP
9#define KUNAI_DEX_DVM_DVM_TYPES_HPP
12#include <unordered_map>
18 static const std::uint32_t ENDIAN_CONSTANT = 0x12345678;
19 static const std::uint32_t REVERSE_ENDIAN_CONSTANT = 0x78563412;
20 static const std::uint32_t NO_INDEX = 0xFFFFFFFF;
22 static const std::uint8_t dex_magic[] = {
'd',
'e',
'x',
'\n'};
23 static const std::uint8_t dex_magic_035[] = {
'd',
'e',
'x',
'\n',
'0',
'3',
'5',
'\0'};
24 static const std::uint8_t dex_magic_037[] = {
'd',
'e',
'x',
'\n',
'0',
'3',
'7',
'\0'};
25 static const std::uint8_t dex_magic_038[] = {
'd',
'e',
'x',
'\n',
'0',
'3',
'8',
'\0'};
26 static const std::uint8_t dex_magic_039[] = {
'd',
'e',
'x',
'\n',
'0',
'3',
'9',
'\0'};
34 REF_NEW_INSTANCE = 0x22,
35 REF_CLASS_USAGE = 0x1c,
36 INVOKE_VIRTUAL = 0x6e,
40 INVOKE_INTERFACE = 0x72,
41 INVOKE_VIRTUAL_RANGE = 0x74,
42 INVOKE_SUPER_RANGE = 0x75,
43 INVOKE_DIRECT_RANGE = 0x76,
44 INVOKE_STATIC_RANGE = 0x77,
45 INVOKE_INTERFACE_RANGE = 0x78
72 CONDITIONAL_BRANCH_DVM_OPCODE = 0,
73 UNCONDITIONAL_BRANCH_DVM_OPCODE,
74 RET_BRANCH_DVM_OPCODE,
75 MULTI_BRANCH_DVM_OPCODE,
77 DATA_MOVEMENT_DVM_OPCODE,
78 FIELD_READ_DVM_OPCODE,
79 FIELD_WRITE_DVM_OPCODE,
105 ACC_SYNCHRONIZED = 0x20,
108 ACC_TRANSIENT = 0x80,
111 ACC_INTERFACE = 0x200,
112 ACC_ABSTRACT = 0x400,
114 ACC_SYNTHETIC = 0x1000,
115 ACC_ANNOTATION = 0x2000,
118 ACC_CONSTRUCTOR = 0x10000,
119 ACC_DECLARED_SYNCHRONIZED = 0x20000
123 enum class value_format
132 VALUE_METHOD_TYPE = 0x15,
133 VALUE_METHOD_HANDLE = 0x16,
140 VALUE_ANNOTATION = 0x1D,
148#define OPCODE(ID, VAL) \
150#include "Kunai/DEX/DVM/definitions/dvm_types.def"
154 static const std::unordered_map<Kind, std::string> KindString =
156 {Kind::METH,
"METH"},
157 {Kind::STRING,
"STRING"},
158 {Kind::TYPE,
"TYPE"},
159 {Kind::PROTO,
"PROTO"},
160 {Kind::METH_PROTO,
"METH_PROTO"},
161 {Kind::CALL_SITE,
"CALL_SITE"},
162 {Kind::VARIES,
"VARIES"},
163 {Kind::INLINE_METHOD,
"INLINE_METHOD"},
164 {Kind::VTABLE_OFFSET,
"VTABLE_OFFSET"},
165 {Kind::FIELD_OFFSET,
"FIELD_OFFSET"},
166 {Kind::RAW_STRING,
"RAW_STRING"},
167 {Kind::NONE_KIND,
"NONE"}};
170 static const std::unordered_map<access_flags, std::string> ACCESS_FLAGS_STR =
172 {access_flags::ACC_PUBLIC,
"public"},
173 {access_flags::ACC_PRIVATE,
"private"},
174 {access_flags::ACC_PROTECTED,
"protected"},
175 {access_flags::ACC_STATIC,
"static"},
176 {access_flags::ACC_FINAL,
"final"},
177 {access_flags::ACC_SYNCHRONIZED,
"synchronized"},
178 {access_flags::ACC_BRIDGE,
"bridge"},
179 {access_flags::ACC_VARARGS,
"varargs"},
180 {access_flags::ACC_NATIVE,
"native"},
181 {access_flags::ACC_INTERFACE,
"interface"},
182 {access_flags::ACC_ABSTRACT,
"abstract"},
183 {access_flags::ACC_STRICT,
"strictfp"},
184 {access_flags::ACC_SYNTHETIC,
"synthetic"},
185 {access_flags::ACC_ENUM,
"enum"},
186 {access_flags::UNUSED,
"unused"},
187 {access_flags::ACC_CONSTRUCTOR,
"constructor"},
188 {access_flags::ACC_DECLARED_SYNCHRONIZED,
"synchronized"}};
191 static const std::unordered_map<char, std::string> type_descriptor_map =
utilities
Definition analysis.hpp:23