jvm bytecode engineering 101

24
Kees Jan Koster [email protected] JVM bytecode engineering 101 Wednesday, November 6, 13

Upload: nljug

Post on 10-Nov-2014

416 views

Category:

Technology


4 download

DESCRIPTION

 

TRANSCRIPT

Page 1: JVM bytecode engineering 101

Kees Jan [email protected]

JVM bytecode engineering 101

Wednesday, November 6, 13

Page 2: JVM bytecode engineering 101

Wednesday, November 6, 13

Page 3: JVM bytecode engineering 101

• 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

Page 4: JVM bytecode engineering 101

java-monitorserver

java-monitorprobe

java-monitorprobe

java-monitorprobe

java-monitorplugin

java-monitorprobe

java-monitorprobe

Wednesday, November 6, 13

Page 5: JVM bytecode engineering 101

Wednesday, November 6, 13

Page 6: JVM bytecode engineering 101

Wednesday, November 6, 13

Page 7: JVM bytecode engineering 101

Wednesday, November 6, 13

Page 8: JVM bytecode engineering 101

Wednesday, November 6, 13

Page 9: JVM bytecode engineering 101

• workflow and toolchain

• JVM architecture

• instruction set basics

Wednesday, November 6, 13

Page 10: JVM bytecode engineering 101

write in java

compile to .class

decompile

tweak

debug

recompile to .class

bootstrap

Wednesday, November 6, 13

Page 11: JVM bytecode engineering 101

CA FE BA BE 00 04 AD 00 DA 00 .. .. ..

JVM

class loader class

verifier

Wednesday, November 6, 13

Page 12: JVM bytecode engineering 101

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

Page 13: JVM bytecode engineering 101

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

Page 14: JVM bytecode engineering 101

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

Page 15: JVM bytecode engineering 101

http://www.slideshare.net/tcurdt/no-dark-magic-byte-code-engineering-in-the-real-world

AspectJ

Spring

Wednesday, November 6, 13

Page 16: JVM bytecode engineering 101

• operand stack

• local variables• this pointer

• stack frames and invoking methods

• constant pool

• atomic vs object types

• exceptions

Wednesday, November 6, 13

Page 17: JVM bytecode engineering 101

• push 1

• push 2

• iadd

...

...

Wednesday, November 6, 13

Page 18: JVM bytecode engineering 101

• push 1

• push 2

• iadd

...

...

Wednesday, November 6, 13

Page 19: JVM bytecode engineering 101

• push 1

• push 2

• iadd1

...

...

Wednesday, November 6, 13

Page 20: JVM bytecode engineering 101

• push 1

• push 2

• iadd1

2

...

...

Wednesday, November 6, 13

Page 21: JVM bytecode engineering 101

• push 1

• push 2

• iadd3

...

...

Wednesday, November 6, 13

Page 22: JVM bytecode engineering 101

write in java

compile to .class

decompile

tweak

debug

recompile to .class

bootstrap

javapASMifier

bytecode plugin

Wednesday, November 6, 13

Page 23: JVM bytecode engineering 101

write in java

compile to .class

decompile

tweak

debug

recompile to .class

bootstrap

ASM CheckClassAdapter

Wednesday, November 6, 13

Page 24: JVM bytecode engineering 101

nobody forced you

Wednesday, November 6, 13