Ajuda com ASM  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Estou querendo usar o ASM para poder ler uma classe já compilada, mas não estou conseguindo nem sair do "Hello World" , alguém poderia ajudar?

www.bau-de-dev.com
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Cara.. tem muita coisa pra voce aprender como resposta para a pergunta "poderiam me ajudar?".

Seja mais especifico.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Como começar no ASM? Você teria algum tutorial bem básico? Por exemplo de como ler um código a partir de um .class?
Tentei usar o javassist para fazer isso, mas acho que com ele não dá.

This message was edited 1 time. Last update was at 26/05/2009 11:47:12


www.bau-de-dev.com
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Acho que é melhor começar pelo FAQ - ele indica que é bom você rodar o ASMifier pelo menos para entender o que o ASM requer, e é interessante você ver a saída do programa.

http://asm.ow2.org/doc/faq.html
[WWW]
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

Também existe um plugin pro eclipse que facilita usar o ASMifier.

E qual sua intenção em usar ASM?

Quer ver o código fonte ou como funciona os .class?

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Atenção: o ASM não é adequado para você "descompilar" um programa. Ele é muito bom, por exemplo, para você criar ou modificar uma classe (alguns frameworks de AOP usam o ASM, se não me engano).

Se você quer simplesmente "desassemblar" um programa (ou seja, .class -> bytecodes), use o javap mesmo.

O que você quer fazer com o ASM?
[WWW]
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Eu quero alterar partes do código. Por exemplo pegar a linha de um determinado método e comentar a mesma e ai incluir uma outra linha.
E também queria saber se eu posso procurar dentro do código por uma determinada palavra. Por exemplo se find(test.a()).

www.bau-de-dev.com
Marky.Vasconcelos
Moderador
[Avatar]

Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline

entao.. use o ASMifier comparando a classe compilada e a classe que voce quer como resultado.

Ele vai te mostrar o código necessario para alterar.

Facebook @MarkyHitchhiker +Mark WP: MarkyTech's

Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais

DefaultTableModel?! PARE! Não faça isso! Faça melhor!

Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)

Develop games is fantastic, with words you can make worlds!!!

DON'T PANIC!
MarkyHitchhiker's Blog!
[WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Jedi_FeniX wrote:Eu quero alterar partes do código. Por exemplo pegar a linha de um determinado método e comentar a mesma e ai incluir uma outra linha.
E também queria saber se eu posso procurar dentro do código por uma determinada palavra. Por exemplo se find(test.a()).


Pegar uma linha e comentar, e incluir outra linha? O ASM não é indicado para isso (já que trabalha com .class, não com .java). O correto, no seu caso, é trabalhar com alguma API de "Abstract Syntax Tree", tais como as que o Eclipse e o NetBeans usam para analisar e compilar programas.


[WWW]
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Teria alguma API para indicar thingol?
Lembrando que eu só tenho os .class.

www.bau-de-dev.com
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Se você só tem o .class aí fica um pouco mais difícil, já que você só tem os bytecodes.

Você não tem em bytecodes o conceito de "editar ou comentar uma linha", que é coisa de código java, não de bytecodes.

Talvez, dependendo do que você quer, você tenha de descompilar o código, arrumar o código descompilado manualmente, e então recompilar.
[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

O que você poderia fazer com o ASM é uma ferramenta que pegaria um .class e produziria outro .class, mas com constantes strings modificadas (por exemplo). Digamos que o .class original tivesse uma string assim:

você poderia fazer algo que gerasse um .class com algo semelhante a:


[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

O que não dá para fazer em ASM de forma muito trivial é algo assim:


Que tipo de modificação você quer fazer? Diga que talvez a gente consiga indicar uma solução.
[WWW]
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

É só tenho os .class.
Estava tendo fazer isso com o javassist, nele eu consigo alterar o bytecode, mas só incluir código, não consigo apagar nada.
Abaixo tem um exemplo para vocês entenderem melhor:

Exemplo:

Um usuário faz um upload para myApp.
E ai myApp abre o . jar, lê o .class e faz as alterações necessárias no .class.


www.bau-de-dev.com
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Quais são as "alterações necessárias"?
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team