reJ v0.6 lançado - Editor de bytecode para plataforma Java

30 respostas
Sami_Koivu

Nova versão - reJ v0.6 lançado

reJ é uma ferramenta de visualização, busca, comparação e manipulação de arquivos .class da plataforma Java. Praticamente todos os aspectos (interfaces, classe pai, nome da classe, campos, métodos, o bytecode, os constantes) de arquivos .class podem ser visualizados e modificados.

A nova versão corrige vários bugs, tente corrigir problemas relacionadas a facilidade de uso e contém muitas novidades incluindo: Debug de bytecode, refactoring básico, melhoras de navegação entre classes, suporte para as “novas” funcionalidades de Java 1.5 e comparação de classes e conjuntos de classes totalmente reimplementada.

Também foi lançado hoje o site do projeto, com uma descrição melhor do projeto, os javadocs (que ainda precisam muito trabalho), FAQ e tutoriais:
http://rejava.sourceforge.net/

Confira a notícia no source-forge (em inglês):
http://sourceforge.net/forum/forum.php?forum_id=638007

Faz o download de reJ v0.6 no Source-Forge:
http://sourceforge.net/project/showfiles.php?group_id=122082&package_id=133253&release_id=466234

Funcionalidades, com imagens (em inglês):
http://rejava.sourceforge.net/features.html

Tutorial, com imagens e agora em português (e por favor, desculpem os erros de português tanto aqui quanto no tutorial):
http://rejava.sourceforge.net/hello_pt.html

Screenshots:

FAQ (em inglês):
http://rejava.sourceforge.net/faq.html

Um screenshot da tela de comparação (comparando a classe sun.misc.Version de JRE 1.5.0_08 e JRE 1.5.0_09)

[size=9](Obs: esse é projeto meu e não tenho certeza qual a política do Fórum em relação de usuário postando notícia sobre seu projeto pessoal - assim sendo, se for um problema, favor mudar por ex. para Java Avançado)[/size]

30 Respostas

Luca

Olá

Sami, você é um dos nossos e nos dá grande prazer saber do seu projeto que na minha opinião é muito bom.

Assim que me sobrar um tempo vou examinar com mais detalhe.

[]s
Luca

Sami_Koivu

Luca:
Olá

Sami, você é um dos nossos e nos dá grande prazer saber do seu projeto que na minha opinião é muito bom.

Assim que me sobrar um tempo vou examinar com mais detalhe.

[]s
Luca

Obrigado Luca :slight_smile:

Uma coisa que esqueci de dizer que vale tanto para você quanto para os outros: Todos os comentários, sugestões, etc estão super bem vindos. Também qualquer dúvida é só postar aqui, ou mandar MP, email, mensagem no MSN, etc.

[]s,
Sami

Paulo_Silveira

seu projeto paree muito interessante! ainda mais pra nos que sempre queremos aprender mais do bytecode e dos mnemonicos. como sao poucos, é um assemlbyzinho facil de entender, nao é mesmo?

e com o reJ isso fica facil de aprender! vou aproveitar.

Sami_Koivu

Paulo Silveira:
seu projeto paree muito interessante! ainda mais pra nos que sempre queremos aprender mais do bytecode e dos mnemonicos. como sao poucos, é um assemlbyzinho facil de entender, nao é mesmo?

e com o reJ isso fica facil de aprender! vou aproveitar.

Exato, Paulo. Com poucas instruções e não tendo que brincar com endereços de memória fica bem mais simples e fácil do que um assembly “de verdade”.

Sami_Koivu

Exemplificando a simplicidade, um simples HelloWorld ficaria assim:

public class Hello {

    public static void main(String[] p0) {
        getstatic PrintStream System.out
        ldc String Constant "Hello, World!"
        invokevirtual void PrintStream.println(String)
        return
    }

}

Isto é equivalente do

public class Hello {

    public static void main(String[] p0) {
        System.out.println("Hello, World!");
    }

}

(Com a diferença que o javac iria criar um construtor padrão, também.)

O que acontece no bytecode é seguinte:

Pega o campo out da classe System e joga na pilha.

getstatic PrintStream System.out

Pega o String “Hello, World!” e joga na pilha.

ldc String Constant "Hello, World!"

Chama o método println(String) pegando o(s) parâmetro(s) da pilha, e depois o objeto cujo método chamamos.

invokevirtual void PrintStream.println(String)

Retornar void do método.

return

[]s,
Sami

A

Sami, parabens pelo projeto.
Eu tinha visto o reJ uma vez.
Mas jamais passou na minha cabeca q era de um brasileiro, muito menos frequentador do GUJ…

Parabens!
[]'s

Eduardo_Bregaida

PARABENS SAMI, poxa, mto bom msm :smiley:

Luca

Olá

Frequentador do GUJ sim, mas ele é finlandês e mora na Finlândia, terra da Nokia, dos monitores de freqüencia cardíaca Polar, de uma qualidade de vida das melhores do mundo e do Papai Noel.

Precisando de alguma coisa do Papai Noel, fale com o Sami que ele consegue para você.

[]s
Luca

Sami_Koivu

Luca:
Olá

Frequentador do GUJ sim, mas ele é finlandês e mora na Finlândia, terra da Nokia, dos monitores de freqüencia cardíaca Polar, de uma qualidade de vida das melhores do mundo e do Papai Noel.

Precisando de alguma coisa do Papai Noel, fale com o Sami que ele consegue para você.

[]s
Luca

:lol: Heheh.

Muito boa a lista, Luca. :slight_smile: Aqui no fórum tem também o piloto F1 finlandês : raikk0n3n e o grupo de metal finlandês : Lordi

(Ok, tudo bem, acho que são ambos brasileiros.)

Mas de fato, sou finlandês, mesmo que pretendo passar uns anos no Brasil trabalhando logo que (se) meu visto de trabalho sair. De qualquer forma, obrigado Alexandre e Heero Yuy

[]s,
Sami

pcalcado

Tá muito legal!

Minha sugestão é criar um build script com maven ou ant.

Sami_Koivu

pcalcado:
Tá muito legal!

Minha sugestão é criar um build script com maven ou ant.

Obrigado Phillip e valeu pela sugestão que é logo aceitada. Realmente faz falta.

Ironlynx

Sami Koivu, simplesmente genial seu projeto!
É “choque de monstro”!E eu já vou brincar por aqui…

A

Luca:
Olá

Frequentador do GUJ sim, mas ele é finlandês e mora na Finlândia, terra da Nokia, dos monitores de freqüencia cardíaca Polar, de uma qualidade de vida das melhores do mundo e do Papai Noel.

Precisando de alguma coisa do Papai Noel, fale com o Sami que ele consegue para você.

[]s
Luca

IAHiuHAiuHAIuhAI
Outra coisa q eu jamais pensaria.
Um gringo aqui conosco. Super gente boa e participativo como se fosse um brasileiro…

Irado!

rafaelbpc

Realmente o projeto parece bem legal. Parabens ao SAMI pela ideia e pelo portugues. Nao eh facil encontrar um finlandes ou qualquer outro europeu que fala portugues.

Abs!

T

Sami,

Outra vez que você voltar ao Brasil dê uma passadinha em Penedo (RJ) (se é que você já não foi lá) - vá tomar um chocolate quente com alguns conterrâneos seus.

http://www.visitepenedo.com/

Sami_Koivu

Valeu Ironlynx, Rafael :slight_smile:

thingol:
Sami,

Outra vez que você voltar ao Brasil dê uma passadinha em Penedo (RJ) (se é que você já não foi lá) - vá tomar um chocolate quente com alguns conterrâneos seus.

http://www.visitepenedo.com/

Obrigado pela dica (e o link que eu não tinha), Thingol. Eu tenho uma amiga - uma Brasileira que mora na mesma cidade como eu, casada com um ornitologista finlandês. Ela é de Penedo e me deu um folheto (brochure, não sei se essa é a palavra correta) sobre essa colônia finlandesa. Muito legal, por sinal, e espero que terei a chance de visitar.

[]s,
Sami

mister_m

Em primeiro lugar, Sami, parabéns mesmo pelo projeto. Engraçado que sugeri para um amigo fazer um editor que relacionasse o fonte com o bytecode gerado.

Seu projeto faz isso, i.e., é possível visualizar graficamente a relação entre código-fonte x bytecode (binário mesmo) x pseudo-assembly?

PS: Desculpa perguntar ao invés de fazer download, mas o tempo urge.

Sami_Koivu

mister__m:
Em primeiro lugar, Sami, parabéns mesmo pelo projeto. Engraçado que sugeri para um amigo fazer um editor que relacionasse o fonte com o bytecode gerado.

Seu projeto faz isso, i.e., é possível visualizar graficamente a relação entre código-fonte x bytecode (binário mesmo) x pseudo-assembly?

PS: Desculpa perguntar ao invés de fazer download, mas o tempo urge.

Obrigado, Michael. E que nada, estou mais do que disposto a responder.

Ao que interessa: Infelizmente o reJ ainda não consegue visualizar o código fonte. Se a informação sobre a relação entre as linhas de código fonte e o bytecode gerado está presente no arquivo .class ele consegue visualizar isto. Ou seja, ele mostra qual é o número da linha de código fonte original referente a cada instrução de bytecode.

Fazer a decompilação de bytecode para código fonte é algo que eu gostaria de tentar fazer mas como é longe de ser trivial eu nem tenho começado.

Claro que essa visualização gráfica entre código fonte e bytecode poderia ser feito utilizando o código fonte existente, onde disponível. Isto não tinha me ocorrido antes. Assim até seria relativamente simples de implementar.

O que o projeto faz no momento é que ele mostra esse que você titulou de pseudo-assembly com syntax-highlighting, mostrando a definição da classe, dos campos e dos métodos no estilo de código fonte java.

O binário ele também não mostra no momento. Isto seria extremamente simples de implementar (e visualizar). E por ser tão simples e interessante acho que vou logo implementar como algo que pode ser ligado e desligado (porque cria um pouco mais de “visual noise” que não traz valor extra para todos os casos). A parte de código fonte ainda requer um pouco de planejamento.

Resumindo: Provavelmente não é exatamente o que você tem em mente, mas acho que também não fica muito longe disso e seria uma boa direção para o projeto andar.

A finalidade dessa visualização da relação entre o código fonte x bytecode x pseudo-assembly seria ajudar nós entender melhor a relação, certo? (desculpe a pergunta talvez meio óbvia, mas quero ter certeza que estou conseguindo seguir seu pensamento)

[]s,
Sami

Grinvon

Parabéns Sami, darei uma olhada.

Agora me diga, tu é filandês mas morou quanto tempo aqui no Brasil?

Ah… curte Apocalyptica?

mister_m

A ideia nao seria decompilar e sim usar como ferramenta de ensino. Imagina que o usuario escolha o source root e o class root e o reJ mostre os dois em modo sincronizado. Seria muitissimo interessante pro sujeito entender bytecode! Algumas coisas dao trabalho, como o constant pool, mas seriam as mais divertidas. :slight_smile:

Legal. Eu havia pensado em exibir um split pane com o binario em hexa.

Sim, como eu disse acima. Seria uma ferramenta unica de compreensao de bytecode, alem de um editor.

Sami_Koivu

Grinvon:
Parabéns Sami, darei uma olhada.

Agora me diga, tu é filandês mas morou quanto tempo aqui no Brasil?

Ah… curte Apocalyptica?

Valeu. :slight_smile: Eu tenho morado um total de 12 meses no Brasil. 7 meses em 2002 em São Paulo e 5 meses em 2006 em Curitiba. Pena que foram 5 meses muito corridos e não deu para conhecer muita gente do fórum.

Apocalyptica? Os caras que tocam músicas de Metallica com Cellos? heheh, pelo que eu tenho ouvido na televisão, o som deles é legal, mas nunca escutei muito. Estava preocupado demais em ouvir música Brasileira para melhorar meu português.

[]s,
Sami

Sami_Koivu

Idéias, sugestões, visões! Valeu mesmo pelo feedback, Michael.

A parte do constant pool realmente é complicado com associado com várias linhas de código fonte e cada linha de código fonte associada vários itens do constant pool. Mas dá para fazer, acho, dá para descobrir quais atributos, métodos, campos e instruções utilizam cada item do constant pool e associar instruções com linhas de código fonte é simples, claro. O resto (os campos, por exemplo) requer que a fonte é parseado.

E split pane para mostrar o binario em hexa também parece uma boa idéia. Já havia pensado em adicionar (ou escrever ou tentar encontrar) um componente para visualizar (e talvez editar) binario em hexa para qualquer atributo que não é conhecido pelo reJ e que por isso não pode ser parseado.

[]s,
Sami

mister_m

Pra isso voce pode usar as APIs de annotation parsing e do javac (Tree API). A primeira jah foi padronizada e serah parte do Java 6 e a segunda com certeza nao vai demorar muito nao :slight_smile: O NetBeans 6 usa elas com Java 5.

boaglio

Melhorar? Seu português é melhor do que muita gente por aqui…

Só o primeiro álbum do Apocalyptica faz cover do Metallica, os outros variam mais, incluindo outras bandas como por exemplo o Refuse/Resist do Sepultura e Domination do Pantera no álbum Inquisition_Symphony.

Grinvon

Sami Koivu:
Grinvon:
Parabéns Sami, darei uma olhada.

Agora me diga, tu é filandês mas morou quanto tempo aqui no Brasil?

Ah… curte Apocalyptica?

Valeu. :slight_smile: Eu tenho morado um total de 12 meses no Brasil. 7 meses em 2002 em São Paulo e 5 meses em 2006 em Curitiba. Pena que foram 5 meses muito corridos e não deu para conhecer muita gente do fórum.

Apocalyptica? Os caras que tocam músicas de Metallica com Cellos? heheh, pelo que eu tenho ouvido na televisão, o som deles é legal, mas nunca escutei muito. Estava preocupado demais em ouvir música Brasileira para melhorar meu português.

[]s,
Sami

Eu gosto muito de apocalyptica, começei escutando os primeiros albúns, que tocam músicas realmente do MetallicA.

Seu português é muito bom, pensei que você fosse um brazuca que mora na Filândia! :wink:

Grinvon

boaglio:
Sami Koivu:

Apocalyptica? Os caras que tocam músicas de Metallica com Cellos? heheh, pelo que eu tenho ouvido na televisão, o som deles é legal, mas nunca escutei muito. Estava preocupado demais em ouvir música Brasileira para melhorar meu português.

Melhorar? Seu português é melhor do que muita gente por aqui…

Só o primeiro álbum do Apocalyptica faz cover do Metallica, os outros variam mais, incluindo outras bandas como por exemplo o Refuse/Resist do Sepultura e Domination do Pantera no álbum Inquisition_Symphony.

Para mim o Inquisition Symphony é o melhor álbum deles, não pelo Sepultura que gosto muito (das antigas), mas o trabalho em si do CD é fantástico, tenho o último trabalho deles é muito bom também, mais pop para ficar mais atingível, porém muito bom, até melhor que o “Cult” creio eu.

Sami_Koivu

Pra isso voce pode usar as APIs de annotation parsing e do javac (Tree API). A primeira jah foi padronizada e serah parte do Java 6 e a segunda com certeza nao vai demorar muito nao :slight_smile: O NetBeans 6 usa elas com Java 5.

Valeu mesmo pelas dicas, Michael. Eu até ia perguntar se você soubesse um API mas achei que seria abuso. Bom, legal, vamos ver se já consigo pelo menos uma parte dessas novidades para o próximo release. Com certeza irá melhorar a parte de entendimento do bytecode.

[]s,
Sami

Sami_Koivu

Obrigado, gente, mas vocês deveriam ouvir meu sotaque que é horroroso. Cadê o Marcio? Ele teve que sofrer tentando entender meu português falado.

E sobre o Apocalyptica, foi mal, não quis dizer que eles só tocam músicas do Metallica é só que é assim que eu estou acostumado a definir o grupo. Talvez não seja justo, mas é prático. :slight_smile:

kuchma

Que isso - nao eh horroroso nao, apenas interessante. Tua comunicacao verbal em portugues esta em um nivel legal - da pra sustentar a conversacao numa boa.

Mas nao pecam ao Sami que fale sobre batatas. :slight_smile:

Marcio Kuchma

Sami_Koivu

kuchma:
Mas nao pecam ao Sami que fale sobre batatas. :slight_smile:
Marcio Kuchma

Hahah. :smiley: É que na Finlândia se come muita batata. E eu detesto batata (de todo e qualquer tipo). Estou com saudades de arroz e feijão.

No Brasil, quando você pede um bife num shopping por exemplo, vão te perguntar quais acompanhamentos você quer - batatas fritas, arroz, feijão, farofa, etc.

Na Finlândia, com toda probabilidade vão te perguntar: “Qual batata você quer com seu bife? Batatas fritas? Purê? Arroz?”. Sério. A palavra batata tem substituído a palavra acompanhamento aqui. Usa-se a palavra batata para referir a arroz.

(Maldito Gmail que não entrega as notificações :slight_smile: )

[]s,
Sami

Criado 24 de novembro de 2006
Ultima resposta 13 de dez. de 2006
Respostas 30
Participantes 13