Instrumenta - PowerPoint PPT Presentation

About This Presentation
Title:

Instrumenta

Description:

Title: Instrumenta o de bytecode Java Last modified by: Eduardo Document presentation format: On-screen Show Other titles: Times New Roman Arial Lucida Sans ... – PowerPoint PPT presentation

Number of Views:51
Avg rating:3.0/5.0
Slides: 15
Provided by: cinUfpeBr
Category:

less

Transcript and Presenter's Notes

Title: Instrumenta


1
Instrumentação de bytecode Java
  • Eduardo Lourenço Apolinário

2
Problema
  • Como alterar um programa que já pode estar em
    execução?

3
Tentativa 1
  • Alterar o código fonte e tentar recompilar o
    código (fazendo parsing pra achar o método main,
    etc).
  • Problemas
  • O usuário não (re)compila os fontes de um
    programa
  • Em programas proprietários, o fonte não está
    disponível
  • Abordagem ingênua

4
Tentativa 2
  • Decompilar uma classe e mexer no código fonte
    decompilado.
  • Problemas
  • Obfuscação dos .class

5
Tentativa 3
  • Alteração do Extensions Class Loader para
    patching de classes do core.
  • Para isntrumentação de bytecode java, algumas
    alternativas
  • Asm
  • BCEL
  • SERP
  • Javassist

6
Mas vamos por partes...
7
Divisão dos Class Loaders
  • Bootstrap Class Loader
  • Diretórios e arquivos JAR listados na propriedade
    do sistema sun.boot.class.
  • Pode ser manipulado com -Xbootclasspath
  • Extensions Class Loader
  • Diretórios e arquivos listados em java.ext.dirs,
    que geralmente aponta pra lib/ext do JRE.
  • Comando -Djava.ext.dirsltpathgt
  • Application Class Loader
  • Diretórios listados em java.class.path, que é o
    CLASSPATH

8
Mas por que o Extensions ?
  • As classes em Java são carregadas do bootstrap
    pra baixo, ou seja, primeiro o bootstrap tenta,
    depois o extensions, depois o application.
  • É mais complicado alterar o Bootstrap class
    loader.
  • Poderia alterar o application, mas ficaria preso
    a uma só aplicação.

9
O Class Loader
  • Carrega as classes, logo, é um ponto fundamental
    de um sistema java.
  • Não é difícil construir um class loader, basta
    herdar de java.lang.ClassLoader e alterar, no
    mínimo, o método findClass.

10
Instrumentação de bytecode
  • Alteração de bytecode java
  • ASM
  • Biblioteca muito pequena, com ótima performance
    e, o melhor, de fácil utilização
  • Plugins para eclipse
  • BCEL
  • Projeto da Apache
  • Mais antigo
  • Tamanho 10 vezes maior que a ASM, performance
    700 menor

11
Instrumentação de bytecode
  • Javassist
  • Tem facilidades de alteração de bytecode via
    código java.
  • Projeto do JBoss
  • É muito maior que as outars bibliotecas
  • Performance entre 400 e 500 menor que a ASM

12
Tá, mas qual eu escolhi?
  • Testei o ASM e o Javassist
  • O ASM te força a entender dos bytecode java (que
    não é difícil de entender, vide
    http//www-128.ibm.com/developerworks/ibm/library/
    it-haggar_bytecode/
  • Como dito anteriormente, o javassist é quase uma
    mãe.

13
Exemplo
  • Classe Person e Main.
  • Demonstração

14
Referências
  • Covert Java, 2004, Sams Publishing
  • Manning - Java Reflection in Action (2005)
  • Addison-Wesley - Component Development for the
    Java Platform (2002)
  • ttp//asm.objectweb.org/doc/tutorial-asm-2.0.html
  • http//www.csg.is.titech.ac.jp/chiba/javassist/tu
    torial/tutorial.html
  • http//www-128.ibm.com/developerworks/java/library
    /j-onejar/
  • http//www-128.ibm.com/developerworks/java/library
    /j-dyn0916.html
  • http//www-128.ibm.com/developerworks/ibm/library/
    it-haggar_bytecode/
  • http//weblogs.java.net/blog/kellyohair/archive/20
    05/05/bytecode_instru.html
  • http//www.kevinboone.com/classpath.html
Write a Comment
User Comments (0)
About PowerShow.com