| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 11:27:35
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 11:35:14
|
Marky.Vasconcelos
Moderador
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.png)
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! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 11:46:55
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 11:51:04
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 11:56:11
|
Marky.Vasconcelos
Moderador
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.png)
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! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 11:58:00
|
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 12:01:01
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 12:03:43
|
Marky.Vasconcelos
Moderador
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.png)
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! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 12:05:34
|
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.
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 12:20:14
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 12:24:43
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 12:26:41
|
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:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 12:29:14
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 12:29:46
|
Jedi_FeniX
Virtual Machine Man
![[Avatar]](/images/avatar/06ab8d9df63b836129099247301c038b.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/05/2009 12:30:23
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Quais são as "alterações necessárias"?
|
|
|
 |
|
|