541 Commits

Author SHA1 Message Date
Ben Gruver
e8760aa46b Add support for method handle and call site references in ReferenceUtil 2018-05-23 13:34:16 -07:00
Ben Gruver
858d264db9 Change the name of the invoke method handle types
Change the names to match the name used in the smali grammar
2018-05-23 13:34:16 -07:00
Ben Gruver
5c5e4ae279 Implement support for new structures in DexWriter 2018-05-23 13:34:16 -07:00
Ben Gruver
cc34359691 Create separate section for encoded arrays 2018-05-23 13:34:16 -07:00
Ben Gruver
fa5d0cc73a Add Immutable implementations of the new structures 2018-05-23 13:34:16 -07:00
Ben Gruver
8bdb50381d Fix up a few non-immutable members in immutable encoded value implementations 2018-05-23 13:34:16 -07:00
Ben Gruver
dea793447f Add DexBacked implementations of the new structures 2018-05-23 13:34:16 -07:00
Ben Gruver
ead2e033d0 Add getItemCount method to EncodedArrayItemIterator 2018-05-23 13:34:16 -07:00
Ben Gruver
2215e031bf Fix typo in DexBackedMethodEncodedValue 2018-05-23 13:34:16 -07:00
Ben Gruver
88ece20f9f Move the map item related methods from RawDexfile to DexBackedDexFile 2018-05-23 13:34:16 -07:00
Ben Gruver
e3fd1e8115 StaticInitialValueIterator -> EncodedArrayItemIterator 2018-05-23 13:34:16 -07:00
Ben Gruver
6c054e1b44 Minor javadoc fixes in MethodProtoReference 2018-05-23 13:34:16 -07:00
Ben Gruver
b575410a8a Add the basic structures necessary to support invoke-custom 2018-05-23 13:34:16 -07:00
Ben Gruver
38f575608f Fix line_start annotation in debug_info_item
line_start can be > 2^31, so we have to use readBigUleb128 instead
of readSmallUleb128
2017-10-02 19:10:31 -07:00
Ben Gruver
20a272dbb9 Fix an issue when writing uleb128 values larger than 2^31 2017-10-02 19:10:31 -07:00
Orion Hodson
b84345935a Fix out registers for invoke-polymorphic
The calculation of the number of output registers for
invoke-polymorphic and invoke-polymorphic-range should be based on the
number of registers provided.
2017-09-12 14:34:56 -07:00
Daniel Bali
d4702a45a7 Add basic support for ODEX instructions 2017-05-17 11:20:30 -07:00
Wojtek Kaliciński
dd11921529 Fix for counting method implementation sizes 2017-04-25 12:02:57 -07:00
Wojtek Kaliciński
b65e942e7e Add support for getting byte sizes to dex backed references 2017-04-21 13:54:27 -07:00
Furniel
9df7a67273 Fixed Android M and N deodexing(Fixes #503) 2017-03-29 12:39:44 +03:00
Ben Gruver
48cde6219d Add initial support for vdex files
This is the bare minimum to get deodexing to work with vdex files.
2017-03-25 16:25:49 -07:00
Ben Gruver
9e3e86fda0 Improve the special case logic when propagating register types
This improves the logic dealing with initializing uninitialized reference and
narrowing register types after an instance-of
2017-03-12 15:41:14 -07:00
Ben Gruver
152250d900 Fix missing format argument 2017-03-11 13:20:23 -08:00
Ben Gruver
1a83d5a2d0 Propagate sideways conversions after an instance-of + if-eq/if-eqz
Previously, we only propagated the conversion if it was a narrowing
conversion, to avoid problems that can occur with member access with
widening conversions.

However, it should be safe to do the conversion for a "sideways"
conversion - one that is neither widening or narrowing.

This can happen if we don't yet have full knowledge of the register types,
or, less likely, if the "true" branch is impossible to reach.

In the first case, we should get better type info as we continue to analyze
the method, and we'll revisit the conversion once we have better type info.

Or, if it really is an impossible conversion, we still want to propagate
the type from the instance-of to the true branch.
2017-01-07 18:11:39 -08:00
Ben Gruver
adb12356c3 Don't perform type narrowing after an instance-of on dalvik 2016-11-12 12:54:02 -08:00
Ben Gruver
5e387e5931 Add better error message for when instruction offset is out of range 2016-11-06 14:25:25 -08:00
Ben Gruver
a0ccd94bf9 Improve the error message for a truncated last instruction 2016-10-23 22:10:11 -07:00
Ben Gruver
8e1afdda32 Clean up how api levels are handled in various places
Now that dex files store an associated Opcodes instance, we don't need to
pass the api level around as much.
2016-10-23 22:09:52 -07:00
Ben Gruver
ca0a4bdf37 Remove some unneeded casts in BuilderClassDef 2016-10-23 11:54:50 -07:00
Ben Gruver
fd8a1b4adc Make BuilderAnnotationSet public
It is used as a return type of public api BuilderClassDef.getAnnotations
2016-10-23 11:54:14 -07:00
Ben Gruver
c8e896b984 Add default dependencies for Android N 2016-10-17 16:19:15 -07:00
Ben Gruver
cb14aa7074 Remove obsolete TODO 2016-10-17 16:16:28 -07:00
Ben Gruver
8fa96e2fcd Resolve odex dependencies to jar files when needed 2016-10-17 16:15:17 -07:00
Ben Gruver
16d4b5656b Use a BufferedInputStream in ZipDexContainer.isDex 2016-10-16 13:46:42 -07:00
Ben Gruver
a6593575e7 Be more precise about narrowing after an instance-of
Only do the additional narrowing when all predecessors of the instance-of
are equivalent move instructions.
2016-10-16 13:45:30 -07:00
Albert Gorski
e75f2b230a Ensure the ZipFile is closed in isZipFile() of ZipDexContainer
When calling isZipFile() in ZipDexContainer, the ZipFile would remain open if
the file was in fact a zip file but the ZipFile object would then go out of
scope thus creating a resource leak. This ensures that the ZipFile is closed
by adding a finally clause containing a close call at the end of the try catch
block.
2016-10-15 21:12:23 -07:00
Ben Gruver
5189797292 Unify how sections are referenced in DexPool and DexBuilder 2016-10-15 20:58:19 -07:00
Ben Gruver
4eefe294e4 Add a public utility method for verifying dex/odex headers 2016-10-15 15:07:32 -07:00
Ben Gruver
145bc820d3 Add a ClassPath(Iterable<ClassProvider>) constructor 2016-10-15 10:27:10 -07:00
Narayan Kamath
55c33ebb09 Add a placeholder ART version number / api level for aosp/master.
Also make invoke-polymorphic conditional on this new art version.

This also fixes a bug where the version was being selected incorrectly
due to a parameter name that shadowed a local variable.
2016-10-07 15:06:07 +01:00
Ben Gruver
615d383320 Make ZipDexContainer more subclass-friendly 2016-10-04 23:05:47 -07:00
Ben Gruver
2996766649 Add MultiDexContainer.getOpcodes() 2016-10-04 23:03:38 -07:00
Ben Gruver
2d0f6254b1 Merge branch 'v2.2_WIP' 2016-10-02 16:41:52 -07:00
Ben Gruver
384161e060 Detect and ignore out-of-range debug info offsets 2016-10-02 16:34:41 -07:00
Ben Gruver
219bdff2d1 Properly implement the art <-> api version map 2016-10-02 16:05:22 -07:00
Ben Gruver
59256149f1 Add functionality for efficient multi-dex writing with DexPool
This adds support to DexPool for mark()/reset(), which can be used to
"rollback" the last added class in case it caused a constant pool overflow.

This also adds a "DexWriter.hasOverflowed()" helper method to determine if
any of the size-constrained pools have overflowed.
2016-10-02 12:18:52 -07:00
Ben Gruver
af8a063472 Set the minimum oat version for the fixed post-default-method vtable to 87 2016-10-02 12:18:52 -07:00
Ben Gruver
67171366db Reparent interface methods in a vtable
These are now reparented at the point where a invoke-virtual/quick
is being resolved, if needed
2016-10-02 12:18:52 -07:00
Ben Gruver
dbd9db303a Tweak ZipDexContainer so it doesn't keep an open ZipFile 2016-10-02 12:18:51 -07:00
Ben Gruver
ab20c37fd0 Fix up the post-default interface generation 2016-10-01 17:07:18 -07:00