Ben Gruver
d762deacc9
Add a hidden command for printing out the lexical tokens of a smali file
...
This is useful for creating/updating the .tokens file for the lexer tests.
2019-09-17 13:31:22 -07:00
Ulya Trafimovich
209ba3b0a6
Disallow spaces in Simple name prior to the future API level 30.
2019-09-17 13:31:12 -07:00
Ulya Trafimovich
586ec594e2
Allow space characters in SimpleName.
...
DEX format allows Unicode space characters in SimpleName since version 040.
Allowed space characters include everything in Unicode category 'Zs':
0x20, 0xa0, 0x1680, 0x2000..0x200a, 0x202f, 0x205f, 0x3000
Smali now supports symtax `method with spaces` (spaces are allowed in
backtick-quoted names).
2019-09-17 13:31:03 -07:00
Ben Gruver
751fe1ce61
Fix Preconditions.checkArrayPayloadElements
...
The previous implementation did not correctly handle negative numbers.
2019-09-12 11:30:27 -07:00
Ben Gruver
f8d6f15768
Bump the version to v2.3.1
2019-08-28 12:15:05 -07:00
Ben Gruver
cf73ce28fd
Fix the getters in ImmutableInstruction45cc
2019-08-28 12:15:05 -07:00
Ben Gruver
519f41e655
Upgrade guava dependency to v27.1
...
This matches the version currently used in the android master tree
2019-08-28 11:59:00 -07:00
Ben Gruver
4cf7ce758e
Fix issue when parsing method handle references
2019-08-26 14:34:55 -07:00
Ben Gruver
14dc37370b
Use anonymous inner classes instead of lambdas
...
The lambdas were causing strange errors when running baksmali on
Android P - e.g. #676
2019-08-26 12:29:10 -07:00
Ben Gruver
3b70c36296
Add better error messages when finding embedded dex files for oat files
2019-08-23 14:19:07 -07:00
Ben Gruver
bdbea44b98
Gracefully handle malformed array payload instructions with element width=0
...
These get handled as if they had element width=1 and element count=0
2019-08-23 14:04:40 -07:00
Ben Gruver
225a00c768
Use DexBacked* classes for the various sections in DexBackedDexFile
2019-08-23 11:22:13 -07:00
Alex Melkonyan
b044a00353
Fix bug #709
2019-08-23 11:16:30 -07:00
Ben Gruver
3cccf68502
Bump the version to 2.3
2019-08-07 14:49:40 -07:00
Ben Gruver
a29a420d2f
Update the version map to reflect the released version of api 28
2019-08-07 14:49:31 -07:00
Ben Gruver
1ac14a1082
Add a workaround for the sym linked vdex files in api 28
...
In api 28, the vdex files in, e.g. the framework/arm directory are actually
just sym links to a shared vdex file in the framework directory. However,
the sym links use an absolute path, and so they don't resolve correctly in
the loop mounted system image.
As a simple workaround, we'll just search upward one directory in the path
if the vdex file can't be resolved.
2019-08-07 14:12:19 -07:00
Ben Gruver
c639d229c6
Add support for the new debug offset table for cdex files
2019-08-07 14:12:19 -07:00
Ben Gruver
8e4391262d
Some dex files are listed in the oat file, but aren't present in the oat/vdex
...
Oat version 138 introduced the concept of an "uncompressed" dex file, where
the dex file is listed in the oat file, but it's not actually present in
the oat or vdex files, instead, it's in the apk as per usual.
This change makes dexlib2 ignore these files, treating them as if they are
not a part of the oat file.
2019-08-07 14:12:19 -07:00
Ben Gruver
6c110c1d96
Allow '!' as a separator char in embedded dex file names
...
Newer versions of art seem to use ! instead of : to separate the
inner dex filename from the name of the container containing it.
e.g.
/system/framework/framework.jar!classes2.dex
instead of
/system/framework/framework.jar:classes2.dex
2019-08-07 14:12:19 -07:00
Ben Gruver
732fe07403
Add initial support for cdex files
...
Loading cdex files is mostly supported, except for the new debug info
structures.
Dumping is somewhat supported, but only when there's a single cdex file
in the vdex.
2019-08-07 14:12:19 -07:00
Ben Gruver
eb3ab41fb1
Refactor CodeItem in preparation for cdex implementation
...
This extracts out the SectionAnnotator implementation into a named class,
which can be overridden by the cdex implementation
2019-08-07 14:05:34 -07:00
Ben Gruver
927a8b3c7c
Refactor DexBackedDexFile in preparation for cdex implementation
...
This pulls out some of the functionality into protected methods that can
be overrided by the cdex implementation
2019-08-07 14:05:34 -07:00
Ben Gruver
dc79917ece
Refactor DexBackedMethodImplementation in preparation for the cdex implementation
...
This pulls out some of the operations into protected methods, to be
overridden in the cdex implementation.
2019-08-07 14:05:34 -07:00
Ben Gruver
862c767d58
Let a section override how it calculates the item offsets
...
This will be needed for the cdex code_item section, whose format doesn't
allow direct enumeration like we use for everything else.
2019-08-07 14:05:34 -07:00
Ben Gruver
1eb12ffc68
Continue dumping other sections after an error in one section
2019-08-07 14:05:34 -07:00
Ben Gruver
a1fa38da8d
Update all the data offset references to use the data buffer
2019-08-07 14:05:34 -07:00
Ben Gruver
587efc71dd
Add a separate data buffer for DexBackedDexFile
...
For cdex files, offsets into the data section are specified relative to
the start of the data section, instead of relative to the start of the dex
file.
This adds a separate data buffer that can be used to resolve these
references.
2019-08-07 14:05:34 -07:00
Ben Gruver
52087a0c7c
Add support for dumping dex files that begin at some offset within a file
2019-08-07 14:05:34 -07:00
Ben Gruver
783943ebff
Change OatFile to return DexBackedDexFiles, instead of OatDexFiles
2019-08-07 14:05:34 -07:00
Ben Gruver
1a52897373
Delete RawDexFile
...
This was a thin wrapper around DexBackedDexFile that really had no purpose
itself.
2019-08-07 14:05:34 -07:00
Ben Gruver
906f4d67c1
Decouple the DexEntry for MultiDexContainer
...
Instead of having a DexFile subclass that extends DexEntry, it's now a
separate entity, which returns the associated dex file.
2019-08-07 14:05:34 -07:00
Ben Gruver
f8e5be6afe
Decouple BaseDexBuffer from DexBackedDexFile
...
Instead of having DexBackedDexFile extend BaseDexBuffer itself, it is now a
separate class, and can be accessed via DexBackedDexFile.getBuffer()
2019-08-07 14:05:34 -07:00
Ben Gruver
8faa4b31ec
Refactor how information about indexed items are exposed in DexBackedDexFile
...
This adds a unified IndexedSection/OptionalIndexedSection class for
all indexed items
2019-08-07 14:05:34 -07:00
Ben Gruver
2412f1f741
Remove isOdexFile, and rename hasOdexOpcodes to supportsOptimizedOpcodes
...
isOdexFile was no longer being used, and hasOdexOpcodes had a slightly
misleading name, since it could potentially return true for an odex or
oat embedded dex file that didn't actually have any odex opcodes.
2019-08-07 14:05:34 -07:00
Ben Gruver
4eb5e48578
Improve how invalid references are handled
...
This adds a validateReference() method to the Reference interface, where
subclasses can check themselves and throw an InvalidReferenceException
2019-08-07 14:05:34 -07:00
Ben Gruver
ad8f15d61d
Add the new type and string bss mapping offsets in the oat header
2019-08-07 14:05:34 -07:00
Ben Gruver
2f31502924
Update OatVersions.txt and VdexVersions.txt
2019-08-07 14:05:34 -07:00
aki-ks
77afc7caa0
Implement immutable instructions 45cc and 4rcc
2019-08-01 19:42:47 -07:00
aki-ks
29f9020de4
Implement postponed immutable instruction assertions
2019-08-01 19:38:33 -07:00
Eric Hettiaratchi
9340652ff6
Add unit tests for org.jf.util.Hex
...
These tests were written using Diffblue Cover.
2019-06-13 11:47:05 -07:00
Gergely Nagy
c70a7008f6
Upgraded to Gradle 5.1; fixed two issues, caused by the changes of the version upgrade; RESULT: build succeeds on Ubuntu 18.04 with openJDK 11; version details see below
...
Gradle 5.1
Build time: 2019-01-02 18:57:47 UTC
Revision: d09c2e354576ac41078c322815cc6db2b66d976e
Kotlin DSL: 1.1.0
Kotlin: 1.3.11
Groovy: 2.5.4
Ant: Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM: 11.0.2 (Oracle Corporation 11.0.2+9-Ubuntu-3ubuntu118.04.3)
OS: Linux 4.15.0-47-generic amd64
Distro: Ubuntu 18.04.2 LTS
2019-05-17 15:42:24 -07:00
Ben Gruver
76867f0ae9
Bump the version to v2.2.7
2019-04-04 11:15:17 -07:00
Ben Gruver
0d4443a19a
Gracefully deal with code addresses that are out of range in MutableMethodImplementation
...
The code addresses in debug info items are not verified, and may be out of
bounds. If this happens, we just clamp them to the maximum code address.
2019-03-21 13:41:00 -07:00
Ben Gruver
580b27f379
Bump the version to v2.2.6
2019-01-23 00:23:56 -08:00
Erik Derr
72c0d9d89a
make opcodes nullable in loadDexContainer
2019-01-23 00:17:12 -08:00
Mikaël
5935fe6ef8
Remove usage of sput-object-volatile into FieldUsageTypeTest
...
- Since 2db1dec703
, sput-object-volatile is no longer supported at default api level.
Thus remove his usage until Smalidea has a way to define the api level to use.
2018-10-07 14:01:36 -07:00
Mikaël
cb4a44bdd1
Update results of testPackedSwitch and testSparseSwitch
...
- Computation of switch target offsets was modified into
10fd792f59
,
thus update expected results to reflect this change.
2018-10-07 14:00:51 -07:00
Mikaël
7f46be6473
Align smallidea tokens and grammar on smali
...
- Now the following tests are fixed:
* org.jf.smalidea.MethodRenameTest.testMethodRename
* org.jf.smalidea.dexlib.SmalideaMethodTest.testArrayData
* org.jf.smalidea.dexlib.SmalideaMethodTest.testCatchBlocks
* org.jf.smalidea.MethodReferenceTest.testJavaReferenceFromSmali
* org.jf.smalidea.MethodReferenceTest.testSmaliReferenceFromSmali
* org.jf.smalidea.SmaliCodeFragmentFactoryTest.testUnknownClass
* org.jf.smalidea.SmaliCodeFragmentFactoryTest.testRegisterType
* org.jf.smalidea.findUsages.MethodUsageTypeTest.testMethodUsageTypes
* org.jf.smalidea.findUsages.HighlightLocalClassUsagesTest.testHighlightLocalClassUsage
* org.jf.smalidea.findUsages.FindClassUsagesTest.testSmaliUsageInSmaliFile
* org.jf.smalidea.findUsages.FindClassUsagesTest.testJavaUsageInSmaliFile
2018-10-07 13:59:22 -07:00
Mikaël
280fe36112
Update gradle wrapper as defined by the gradle version into the wrapper task
...
- Now the used gradle wrapper is the same than the gradle wrapper specified
into the wrapper task of build.gradle.
2018-10-07 13:58:05 -07:00
Ben Gruver
b8638eccee
Bump the version to 2.2.5
2018-08-28 12:28:43 -07:00