Skip to content

Releases: jumanji144/Jasm

2.6.0

20 Aug 13:52
Compare
Choose a tag to compare

What's new?

  • Known length array values
    • Arrays created with a known array length carry this length
    • arraylength instructions will then return this as a known value
    • Does not yet work on multidimensional arrays
  • New warnings for incompatible stack types on comparison instructions
  • New warnings for wide types in arithmetic instructions
  • Support for optional descriptors for type instructions

What's fixed?

  • anewarray not allowing multi dimensional array descriptors
  • Float and double compares in analysis
  • Instructions being not aligned with the documentation and vice versa
  • Warning for 0-length multidimensional arrays
  • Remove warning for calling methods on array descriptors

Full Changelog: 2.5.0...2.6.0

2.5.0

29 Jul 20:22
Compare
Choose a tag to compare

What's New

  • Manual specification of library classes in the CLI
  • Warnings added to the error processor
  • Added AST walking to the api
  • Project now is under the MIT license
  • Support for outer and inner classes
  • Support for record components
  • Support for nest host members
  • Support for permitted subclasses
  • Support for source file
  • QOL: --output= defaults to .class by @Kreijstal in #15

What's Fixed

  • NumberFormatException not being wrapped in instruction validatio
  • Strings starting with '.' being treated as a declaration begin
  • Strings only having ':' being treated as a label
  • Eof causing overflow with operators
  • Many issues with wrong analysis:
    • Incorrect handling of null (now null the null object is being represented as being 'null')
    • Incorrect handling of multianewarry
    • Incorrect handling of iinc
    • Incorrect handling of descriptor
    • Incorrect handling of stack merges, causing local type deviation leading to primitive -> object merge
  • Printing sometimes causing incorrect input
  • Update docs to better reflect status of xstore/xload by @0x3C50 in #16
  • Fix type merging (mostly handling null merging properly now) by @Col-E in #17

New Contributors

Full Changelog: 2.4.1...2.5.0

2.4.1

15 Apr 19:51
Compare
Choose a tag to compare

What's new

  • Added .jar decompile options
  • Added options to load a different library folder in compile step
  • Added line instruction:
  • Syntax: line <line number>

What's fixed

  • Incorrect annotation token handling
  • Upstream blw fixes

2.4.0

24 Feb 17:56
Compare
Choose a tag to compare

What's new

  • WIP Dalvik AST model
    • Not intended for use just yet as things are not fully fleshed out, but if you're curious it is there
  • Changes Compiler result from ClassRepresentation to ClassResult which will hold analysis data even if a full ClassRepresentation could not be built
    • This allows getting partial analysis data even if there were build problems
    • Before, analysis data required the class be fully buildable in order to access
  • AST to CodeElement and CodeElement to AST lookups in AnalysisResults
    • Pairs will with the prior change above with partial builds
    • Allows easy look-ups of compilation mappings without having to do a lot of work yourself
  • Shortcuts for common invokedynamic bootstrap methods
    • LambdaMetaFactory.metafactory -> java.lang.invoke.LambdaMetafactory.metafactory(MethodHandles.Lookup, String, MethodType, MethodType, MethodHandle, MethodType)
    • LambdaMetaFactory.altMetafactory -> java.lang.invoke.LambdaMetafactory.altMetafactory(MethodHandles.Lookup, String, MethodType, Object...)
    • ConstantBootstraps.nullConstant -> java.lang.invoke.ConstantBootstraps.nullConstant(MethodHandles.Lookup, String, Class)
    • ConstantBootstraps.primitiveClass -> java.lang.invoke.ConstantBootstraps.primitiveClass(MethodHandles.Lookup, String, Class)
    • ConstantBootstraps.enumConstant -> java.lang.invoke.ConstantBootstraps.enumConstant(MethodHandles.Lookup, String, Class)
    • ConstantBootstraps.getStaticFinal -> java.lang.invoke.ConstantBootstraps.getStaticFinal(MethodHandles.Lookup, String, Class, Class)
    • ConstantBootstraps.invoke -> java.lang.invoke.ConstantBootstraps.invoke(MethodHandles.Lookup, String, Class, MethodHandle, Object...)
    • ConstantBootstraps.fieldVarHandle -> java.lang.invoke.ConstantBootstraps.fieldVarHandle(MethodHandles.Lookup, String, Class, Class, Class)
    • ConstantBootstraps.staticFieldVarHandle -> java.lang.invoke.ConstantBootstraps.staticFieldVarHandle(MethodHandles.Lookup, String, Class, Class, Class)
    • ConstantBootstraps.arrayVarHandle -> java.lang.invoke.ConstantBootstraps.arrayVarHandle(MethodHandles.Lookup, String, Class, Class)
    • ConstantBootstraps.explicitCast -> java.lang.invoke.ConstantBootstraps.explicitCast(MethodHandles.Lookup, String, Class, Object)
    • SwitchBootstraps.enumSwitch -> java.lang.runtime.SwitchBootstraps.enumSwitch(MethodHandles.Lookup, String, MethodType, Object...)
    • SwitchBootstraps.stringSwitch -> java.lang.runtime.SwitchBootstraps.typeSwitch(MethodHandles.Lookup, String, MethodType, Object...)
    • ObjectMethods.bootstrap -> java.lang.runtime.ObjectMethods.bootstrap(MethodHandles.Lookup, String, TypeDescriptor, Class, String, MethodHandle...)
  • Field and method descriptors are now verified for correct formatting
  • More supported values in the provided BasicMethodValueLookup (which got moved to a new package)
  • Value lookups for fields/methods are only attempted when value content is known

What's Fixed

  • Tokenizer associating tokens with wrong column
  • OOBE when printing a virtual method with no parameters
  • Unintended breakage of annotation path selection in CompilerOptions
  • ASTElement.range() yielding unexpected positions due to unsorted children
  • Missing special case handling for numbers (NaN and the like)
  • Incorrectly creating additional parameters when disassembling methods with wide-type parameters
  • Many analysis engine problems
    • nop, arraylength, *aload and *astore instructions not being implemented
    • anewarray not popping array size off the stack
    • checkcase not changing the value type on the stack
    • Value analysis truncating small floats and doubles
    • Analysis engine errors not being reported in the common error collector system
    • Revisiting control flow would not merge frames, but overwrite them with the last visited iteration
    • Jump target frames being put at the wrong index
    • Unmatched push and pop in a variety of stack-manipulating and math instructions
    • Incorrect handling of frame merging for terminal instructions
    • Incorrect printing of annotation enum values
    • Incorrect printing of annotation class values
    • Unexpected re-ordering of annotation values
    • Missing char/special-case-number support for annotation values

Full Changelog: 2.3.0...2.4.0

2.3.0

08 Dec 09:49
Compare
Choose a tag to compare

What's Changed

  • ASTElement will no longer have null children
  • ASTElement children are sorted by position
  • ASTElement.range() will now consider children
  • ASTMethod now has children: modifiers, exception, code
    • Fixes its range() computation
  • Fixes in analysis with missing opcode handling

Full Changelog: 2.2.0...2.3.0

2.2.0-beta pre release

24 Nov 22:08
Compare
Choose a tag to compare
Pre-release

What's Changed

  • Split method analysis into typed/valued engines - #11
  • Annotation support
  • Constant dynamic support
  • Various parser fixes

Full Changelog: 2.1.0...2.2.0

2.1.0-beta pre release

28 Oct 08:47
Compare
Choose a tag to compare
Pre-release
  • Expose stack analysis results in compiler interface

Full Changelog: 2.0.2...2.1.0

2.0.2-beta pre release

22 Oct 21:37
Compare
Choose a tag to compare
Pre-release
  • Fix class replacing visitor scrambling field/method order

Full Changelog: 2.0.1...2.0.2

2.0.1-beta pre release

25 Sep 22:07
Compare
Choose a tag to compare
Pre-release
  • fully fixed up analyzer thanks to @xxDark
  • added exception handlers

Full Changelog: 2.0.0.1...2.0.1

2.0.0.1-beta pre release

24 Sep 16:52
Compare
Choose a tag to compare
Pre-release

What's Changed

  • JDK-8274347: Do not use switch expressions inline with method call parameters by @Col-E in #7
  • Varied fixes by @Col-E in #8
  • Asorted fixes by @Nowilltolife

Full Changelog: 2.0.0...2.0.0.1