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
Ben Gruver
37f5436932
Allow interning classes into a DexPool externally
2016-10-01 17:07:18 -07:00
Ben Gruver
9c039ef1de
Implement ReflectionUtils.dexToJavaName
2016-10-01 17:07:18 -07:00
Ben Gruver
8f27f45fb1
Add Opcodes.getDefault
...
This replace various uses of hardcoded Opcodes.forApi() with
Opcodes.getDefault() or other alternatives as applicable
2016-10-01 17:07:18 -07:00
Ben Gruver
0de5ef0ce7
Add support for the buggy post-default method vtable generation
...
This replicates the buggy vtable generation logic for Android 7.0
2016-10-01 17:07:17 -07:00
Ben Gruver
a54523e080
More default method vtable fixes
2016-09-24 18:16:55 -07:00
Ben Gruver
8081311d30
Implement toString for Method/Field/Proto references
2016-09-24 18:15:07 -07:00
Ben Gruver
17054d5c3d
Load oat dependencies by default, if present
2016-09-24 18:11:50 -07:00
Ben Gruver
dcc7a2b806
Remove OatDexFile.getOatFile in favor of getContainer
2016-09-24 18:07:26 -07:00