35 lines
1.1 KiB
Markdown
35 lines
1.1 KiB
Markdown
# Beethoven: A library for making Java bytecode instrumentation easier
|
|
|
|
The point of this library is to offer a simple, annotation-driven way to instrument classes.
|
|
What this means is that a user of this library should never have to see
|
|
so much as a byte. Everything should be abstracted to the level of classes,
|
|
methods and fields.
|
|
|
|
## Version 2
|
|
|
|
### Implemented
|
|
|
|
* Per-instruction method frame state analysis tools
|
|
|
|
* Method insertion
|
|
|
|
* Method replacement
|
|
|
|
* In-place method appending
|
|
* Accepting return value as argument
|
|
* Overwriting return value
|
|
|
|
* In-place method prepending
|
|
|
|
* Automatic injection of [INVOKEDYNAMIC](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokedynamic) lambda targets
|
|
|
|
### TODO
|
|
|
|
* Better tests
|
|
|
|
* Execution path optimization (e.g. remove unnecessary [GOTO](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.goto)s)
|
|
|
|
* Implement exceptions
|
|
|
|
* Implement try-catch
|
|
* Implement subroutines ([JSR](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.jsr) / [RET](https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.ret)) |