Post on 10-Nov-2014
description
Kees Jan Kosterkjkoster@java-monitor.com
JVM bytecode engineering 101
Wednesday, November 6, 13
Wednesday, November 6, 13
• http://java-monitor.com/livedemo.html
• free, on-line service
• up and running in 5 minutes
• access server stats from your mobile
• get help in the integrated forum
Wednesday, November 6, 13
java-monitorserver
java-monitorprobe
java-monitorprobe
java-monitorprobe
java-monitorplugin
java-monitorprobe
java-monitorprobe
Wednesday, November 6, 13
Wednesday, November 6, 13
Wednesday, November 6, 13
Wednesday, November 6, 13
Wednesday, November 6, 13
• workflow and toolchain
• JVM architecture
• instruction set basics
Wednesday, November 6, 13
write in java
compile to .class
decompile
tweak
debug
recompile to .class
bootstrap
Wednesday, November 6, 13
CA FE BA BE 00 04 AD 00 DA 00 .. .. ..
JVM
class loader class
verifier
Wednesday, November 6, 13
0xCAFEBABE version #
constant poole.g. strings
constant poole.g. strings
access flagsaccess flags
class infoclass info
fieldsfields
methodsmethods
attributesattributes
CA FE BA BE 00 04 AD 00 DA 00 .. .. ..
Wednesday, November 6, 13
0xCAFEBABE version #
constant poole.g. strings
constant poole.g. strings
access flagsaccess flags
class infoclass info
fieldsfields
methodsmethods
attributesattributes
CA FE BA BE 00 04 AD 00 DA 00 .. .. ..
Transformer
static final Logger __log = new ...
__log.info(…);
__log.info(…);
Wednesday, November 6, 13
JVM
class loader class
verifier
CA FE BA BE 00 04 AD 00 DA 00 .. .. ..
Transformer
CA FE BA BE 00 04 AD 00 BE 45 76 .. .. ..
Wednesday, November 6, 13
http://www.slideshare.net/tcurdt/no-dark-magic-byte-code-engineering-in-the-real-world
AspectJ
Spring
Wednesday, November 6, 13
• operand stack
• local variables• this pointer
• stack frames and invoking methods
• constant pool
• atomic vs object types
• exceptions
Wednesday, November 6, 13
• push 1
• push 2
• iadd
...
...
Wednesday, November 6, 13
• push 1
• push 2
• iadd
...
...
Wednesday, November 6, 13
• push 1
• push 2
• iadd1
...
...
Wednesday, November 6, 13
• push 1
• push 2
• iadd1
2
...
...
Wednesday, November 6, 13
• push 1
• push 2
• iadd3
...
...
Wednesday, November 6, 13
write in java
compile to .class
decompile
tweak
debug
recompile to .class
bootstrap
javapASMifier
bytecode plugin
Wednesday, November 6, 13
write in java
compile to .class
decompile
tweak
debug
recompile to .class
bootstrap
ASM CheckClassAdapter
Wednesday, November 6, 13
nobody forced you
Wednesday, November 6, 13