aboutsummaryrefslogtreecommitdiff
path: root/disassembler_dex.h
diff options
context:
space:
mode:
Diffstat (limited to 'disassembler_dex.h')
-rw-r--r--disassembler_dex.h44
1 files changed, 33 insertions, 11 deletions
diff --git a/disassembler_dex.h b/disassembler_dex.h
index 2038a3c..d9d93b2 100644
--- a/disassembler_dex.h
+++ b/disassembler_dex.h
@@ -24,6 +24,7 @@ namespace zucchini {
class DisassemblerDex : public Disassembler {
public:
+ static constexpr uint16_t kVersion = 1;
// Pools follow canonical order.
enum ReferencePool : uint8_t {
kStringId,
@@ -32,8 +33,8 @@ class DisassemblerDex : public Disassembler {
kFieldId,
kMethodId,
// kClassDef, // Unused
- // kCallSiteId, // Unused
- // kMethodHandle, // Unused
+ kCallSiteId,
+ kMethodHandle,
kTypeList,
kAnnotationSetRefList,
kAnnotionSet,
@@ -43,7 +44,7 @@ class DisassemblerDex : public Disassembler {
kAnnotation,
kEncodedArray,
kAnnotationsDirectory,
- // kCallSite, // Unused
+ kCallSite,
kNumPools
};
@@ -69,15 +70,22 @@ class DisassemblerDex : public Disassembler {
kTypeListToTypeId,
kCodeToTypeId,
- kMethodIdToProtoId, // kProtoId
+ kCodeToProtoId, // kProtoId
+ kMethodIdToProtoId,
kCodeToFieldId, // kFieldId
+ kMethodHandleToFieldId,
kAnnotationsDirectoryToFieldId,
kCodeToMethodId, // kMethodId
+ kMethodHandleToMethodId,
kAnnotationsDirectoryToMethodId,
kAnnotationsDirectoryToParameterMethodId,
+ kCodeToCallSiteId, // kCallSiteId
+
+ kCodeToMethodHandle, // kMethodHandle
+
kProtoIdToParametersTypeList, // kTypeList
kClassDefToInterfacesTypeList,
@@ -102,10 +110,7 @@ class DisassemblerDex : public Disassembler {
kClassDefToAnnotationDirectory, // kAnnotationsDirectory
- // Intentionally ignored references (never appeared in test corpus).
- // kMethodHandleToFieldId,
- // kMethodHandleToMethodId,
- // kCallSiteIdToCallSite,
+ kCallSiteIdToCallSite, // kCallSite
kNumTypes
};
@@ -172,6 +177,13 @@ class DisassemblerDex : public Disassembler {
std::unique_ptr<ReferenceReader> MakeReadClassDefToStaticValuesEncodedArray(
offset_t lo,
offset_t hi);
+ std::unique_ptr<ReferenceReader> MakeReadCallSiteIdToCallSite32(offset_t lo,
+ offset_t hi);
+ std::unique_ptr<ReferenceReader> MakeReadMethodHandleToFieldId16(offset_t lo,
+ offset_t hi);
+ std::unique_ptr<ReferenceReader> MakeReadMethodHandleToMethodId16(
+ offset_t lo,
+ offset_t hi);
std::unique_ptr<ReferenceReader> MakeReadTypeListToTypeId16(offset_t lo,
offset_t hi);
std::unique_ptr<ReferenceReader> MakeReadAnnotationSetToAnnotation(
@@ -203,10 +215,16 @@ class DisassemblerDex : public Disassembler {
offset_t hi);
std::unique_ptr<ReferenceReader> MakeReadCodeToTypeId16(offset_t lo,
offset_t hi);
+ std::unique_ptr<ReferenceReader> MakeReadCodeToProtoId16(offset_t lo,
+ offset_t hi);
std::unique_ptr<ReferenceReader> MakeReadCodeToFieldId16(offset_t lo,
offset_t hi);
std::unique_ptr<ReferenceReader> MakeReadCodeToMethodId16(offset_t lo,
offset_t hi);
+ std::unique_ptr<ReferenceReader> MakeReadCodeToCallSiteId16(offset_t lo,
+ offset_t hi);
+ std::unique_ptr<ReferenceReader> MakeReadCodeToMethodHandle16(offset_t lo,
+ offset_t hi);
std::unique_ptr<ReferenceReader> MakeReadCodeToRelCode8(offset_t lo,
offset_t hi);
std::unique_ptr<ReferenceReader> MakeReadCodeToRelCode16(offset_t lo,
@@ -225,6 +243,10 @@ class DisassemblerDex : public Disassembler {
std::unique_ptr<ReferenceWriter> MakeWriteFieldId32(MutableBufferView image);
std::unique_ptr<ReferenceWriter> MakeWriteMethodId16(MutableBufferView image);
std::unique_ptr<ReferenceWriter> MakeWriteMethodId32(MutableBufferView image);
+ std::unique_ptr<ReferenceWriter> MakeWriteCallSiteId16(
+ MutableBufferView image);
+ std::unique_ptr<ReferenceWriter> MakeWriteMethodHandle16(
+ MutableBufferView image);
std::unique_ptr<ReferenceWriter> MakeWriteRelCode8(MutableBufferView image);
std::unique_ptr<ReferenceWriter> MakeWriteRelCode16(MutableBufferView image);
std::unique_ptr<ReferenceWriter> MakeWriteRelCode32(MutableBufferView image);
@@ -248,12 +270,12 @@ class DisassemblerDex : public Disassembler {
dex::MapItem field_map_item_ = {};
dex::MapItem method_map_item_ = {};
dex::MapItem class_def_map_item_ = {};
+ dex::MapItem call_site_map_item_ = {};
+ dex::MapItem method_handle_map_item_ = {};
dex::MapItem type_list_map_item_ = {};
- dex::MapItem code_map_item_ = {};
-
- // Optionally supported (not all DEX files have these).
dex::MapItem annotation_set_ref_list_map_item_ = {};
dex::MapItem annotation_set_map_item_ = {};
+ dex::MapItem code_map_item_ = {};
dex::MapItem annotations_directory_map_item_ = {};
// Sorted list of offsets of parsed items in |image_|.