375 Commits

Author SHA1 Message Date
Ben Gruver
a2bf7f64bc Fix issue with BuilderPackedSwitchPayload instructions
The transformation is performed lazily, and the keys were incorrect
when iterating over the elements more than once
2013-10-17 16:46:06 -07:00
Ben Gruver
899b1e6611 Improve MutableMethodImplementation for external use
Add various utility methods and use more specific overrides, to better
allow external users to access labels
2013-10-14 17:45:46 -07:00
Ben Gruver
902ba7d72d Fix annotation/initial value issues when iterating over fields/methods in a DexBackedDexFile
Make sure to make a new annotation/initial value iterator when making a new
field/method iterator
2013-10-12 02:14:02 -07:00
Ben Gruver
9f48c72390 Fix issues with converting switch statements in MutableMethodImplementation 2013-10-12 01:50:53 -07:00
Ben Gruver
135631b11b Fix issue with Format21lh instructions in MutableMethodImplementation 2013-10-12 01:10:38 -07:00
Ben Gruver
987ac1ed12 Fix the name and type being swapped when converting to ImmutableDebugInfo 2013-10-11 21:50:01 -07:00
Ben Gruver
bc6fcd5ae3 Fix accidental case fall-throughs in MutableMethodImplementation 2013-10-11 21:32:33 -07:00
Ben Gruver
1697b1d97d Fix "hat" literal conversion in MutableMethodImplementation 2013-10-11 21:32:01 -07:00
Ben Gruver
6926ece0cd Check for null before using Iterables.filter 2013-10-10 19:46:02 -07:00
Ben Gruver
216ca5376b Always use the 035 version magic value when writing a dex file 2013-10-10 19:37:56 -07:00
Ben Gruver
7618e1636c Make extra sure we don't output blank debug items 2013-09-28 17:57:33 -07:00
Ben Gruver
84be16bf51 Fix DebugItems in the new builder stuff 2013-09-21 14:40:49 -07:00
Ben Gruver
edd961477e Remove the now unused builder instructions and instruction factories 2013-09-15 12:55:36 -07:00
Ben Gruver
f7d6d5fade Gracefully handle instructions with invalid references 2013-09-14 19:53:21 -07:00
Ben Gruver
45b8a4dae8 Allow "large" uleb128 values for method/field index deltas 2013-09-14 12:47:23 -07:00
Ben Gruver
5ff4ee9a3f Add missing copyright/license headers 2013-09-14 00:43:41 -07:00
Ben Gruver
6762350ca0 Add ability to converting MethodImplementation to MutableMethodImplementation 2013-09-14 00:32:32 -07:00
Ben Gruver
9a2de93a99 Implement just-in-time instruction fixup due to string jumboification 2013-09-08 21:41:23 -07:00
Ben Gruver
99b46173c5 Generify the IO requirements for writing a dex file
The DexWriter implementations now write to a generic "DexDataStore", instead
of writing directly to a file.

Also, writing of the DebugItems and CodeItems are linked, with the code
items being written to a temporary location, and then the entire code item
section is written as a batch after the debug item section.
2013-09-08 15:30:58 -07:00
Ben Gruver
160449b83a Implement instruction fixing in MutableMethodImplementation 2013-09-07 14:54:16 -07:00
Ben Gruver
e80efa670f Implement instructions for the method builder 2013-09-02 12:20:13 -07:00
Ben Gruver
688611814d Implement debug items for the method impl builder 2013-09-01 16:44:20 -07:00
Ben Gruver
bb7937fd30 Get rid of the MethodItem concept 2013-09-01 09:37:49 -07:00
Ben Gruver
897832aa15 Implement try blocks for the method builder 2013-08-31 15:37:10 -07:00
Ben Gruver
160fc1cdba Split off a separate MutableMethodImplementation and implement labels 2013-08-31 14:12:58 -07:00
Ben Gruver
e94ee6fe80 Delete InstructionWriteUtil 2013-08-25 11:07:43 -07:00
Ben Gruver
dff046e1b5 Delete BuilderMethodImplementation, and simplify the DexWriter stuff accordingly
DexBuilder.internMethod now accepts a generic MethodImplementation instead. It is assumed that
the various String/Type/etc. references will have been interned by and returned from the
appropriate DexBuilder methodDelete BuilderMethodImplementation

DexBuilder.internMethod now accepts a generic MethodImplementation instead. It
is assumed that the various String/Type/etc. references will have been
interned by and returned from the appropriate DexBuilder method
2013-08-24 21:53:05 -07:00
Ben Gruver
0cd8417155 Remove the Instruction template parameter from DexWriter 2013-08-24 21:49:26 -07:00
Ben Gruver
e9aa2c230f Remove the Instruction template parameter from InstructionFactory 2013-08-24 21:47:57 -07:00
Ben Gruver
ca5de1d803 Remove the Instruction template parameter from ClassSection 2013-08-24 21:36:21 -07:00
Ben Gruver
6f135aeb74 Remove the ExceptionHandler template parameter from ClassSection
In DexBuilder, instead of statically specifying a specific ExceptionHandler
type, we dynamically check that the exception type reference returned from
the ExceptionHandler is of the proper type
2013-08-24 21:29:20 -07:00
Ben Gruver
9bbcaae91f Remove the DebugItem template parameter from ClassSection
In DexBuilder, instead of statically specifying a specific DebugItem type,
we dynamically check that the various String/Type References returned by
the items are of the proper type
2013-08-24 21:29:10 -07:00
Ben Gruver
a4e0efe9a5 Add ExceptionHandler.getExceptionTypeReference method 2013-08-24 20:23:12 -07:00
Ben Gruver
f320ed5293 Remove some incorrectly applied @Nonnull attributes 2013-08-24 18:53:32 -07:00
Ben Gruver
f97289cf3e Remove unneeded format precondition checks
The format precondition check should always occur in the base instruction
class
2013-08-24 18:53:32 -07:00
Ben Gruver
766f285a70 Initial stub MethodImplementationBuilder and integration into smali 2013-08-24 18:53:26 -07:00
Ben Gruver
e636af4931 Fix bound check for short offset in Precoditions class 2013-06-22 13:07:39 -07:00
Ben Gruver
198e0816cf Fix argument name for offsets in Preconditions class 2013-06-22 13:02:33 -07:00
Ben Gruver
a96cdbee3a Merge pull request #15 from izzytwosheds/bugfixes
Interface methods in the vtable are called on current class, not interface
2013-06-15 20:38:14 -07:00
Izzat Bahadirov
805b247b7d Interface methods in the vtable are called on current class, not interface.
During optimization Dalvik checks if method is invoked on an interface, which causes warnings or errors. To prevent this, we assume that the class we are generating vtable for implements the interface, invoke the interface method on that class and let Dalvik resolve it at runtime.
2013-06-15 23:21:05 -04:00
Ben Gruver
4a92c48839 Use the correct register when creating an UnresolvedOdexInstruction 2013-06-15 18:12:46 -07:00
Ben Gruver
02560f3f7f Make sure the referenced class is accessible when deodexing a field/method access 2013-06-15 18:12:09 -07:00
Ben Gruver
8553393690 Fix some warnings in MethodAnalyzer 2013-06-15 18:12:05 -07:00
Ben Gruver
5a372d5fcf Make SyntheticAccessorResolver thread safe 2013-06-15 11:32:31 -07:00
Izzat Bahadirov
46619d11bf More proper unit test conditions. 2013-06-04 21:40:42 -04:00
Izzat Bahadirov
180529840c Always aligning payload instructions. 2013-06-04 15:44:12 -04:00
Izzat Bahadirov
6d48e5db17 Breaking out of loop after test condition verification. 2013-06-04 15:35:54 -04:00
Ben Gruver
01cfa02bfe Fix issue with opcodes that have a max api 2013-06-01 14:27:57 -07:00
Ben Gruver
d1c0848d13 Don't reuse map entries for the class iterator in ClassPool 2013-06-01 13:53:14 -07:00
Ben Gruver
f1f00f9f6e Initialize ClassDef index to -1 instead of 0 in DexPool 2013-06-01 13:41:53 -07:00