aboutsummaryrefslogtreecommitdiff
path: root/disassembler_dex.h
diff options
context:
space:
mode:
authorckitagawa <ckitagawa@chromium.org>2021-09-07 21:12:21 +0000
committerCopybara-Service <copybara-worker@google.com>2021-09-07 14:22:35 -0700
commit1269b5c6a8a1275b7dfdb7ec349f1990bc7c5d77 (patch)
tree5e5fb506f823182f1e6a11042a1119ec75925392 /disassembler_dex.h
parent737d35c6383995ae4d474cd975aebf92aaf73393 (diff)
downloadzucchini-1269b5c6a8a1275b7dfdb7ec349f1990bc7c5d77.tar.gz
[Zucchini] DEX Version 39 Support
DEX Version 39 added: * const-method-handle containing a method_handle@BBBB reference * const-method-type containing a proto@BBBB reference This CL * Updates CodeToProtoId for const-method-type * Adds CodeToMethodHandle and WriteMethodHandle Fuzzed about 500k iterations locally and uploaded new samples to the clusterfuzz bucket. 97% coverage. Manually tested on hand-written dex files using smali as well as the dexdump test corpus. Bug: 1231885 Change-Id: Id8ab09ac8d3331902c5e6f92ac39ebd26d36e79b Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3060660 Commit-Queue: Calder Kitagawa <ckitagawa@chromium.org> Reviewed-by: Samuel Huang <huangs@chromium.org> Reviewed-by: Etienne Pierre-Doray <etiennep@chromium.org> Cr-Commit-Position: refs/heads/main@{#918948} NOKEYCHECK=True GitOrigin-RevId: d08c50abf7b49f3a5b97a03d5bb79bce9fdb7fad
Diffstat (limited to 'disassembler_dex.h')
-rw-r--r--disassembler_dex.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/disassembler_dex.h b/disassembler_dex.h
index e75d13e..8e739d0 100644
--- a/disassembler_dex.h
+++ b/disassembler_dex.h
@@ -33,7 +33,7 @@ class DisassemblerDex : public Disassembler {
kMethodId,
// kClassDef, // Unused
kCallSiteId,
- // kMethodHandle, // Unused
+ kMethodHandle,
kTypeList,
kAnnotationSetRefList,
kAnnotionSet,
@@ -83,6 +83,8 @@ class DisassemblerDex : public Disassembler {
kCodeToCallSiteId, // kCallSiteId
+ kCodeToMethodHandle, // kMethodHandle
+
kProtoIdToParametersTypeList, // kTypeList
kClassDefToInterfacesTypeList,
@@ -220,6 +222,8 @@ class DisassemblerDex : public Disassembler {
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,
@@ -240,6 +244,8 @@ class DisassemblerDex : public Disassembler {
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);