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

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]

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

[quote=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[/quote]

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

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.

[quote=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.[/quote]

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”.

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

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

PARABENS SAMI, poxa, mto bom msm :smiley:

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

[quote=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[/quote]

: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

Tá muito legal!

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

[quote=pcalcado]Tá muito legal!

Minha sugestão é criar um build script com maven ou ant.[/quote]

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

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

[quote=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[/quote]

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

Irado!

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!

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/

Valeu Ironlynx, Rafael :slight_smile:

[quote=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/
[/quote]

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

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.

[quote=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.[/quote]

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

Parabéns Sami, darei uma olhada.

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

Ah… curte Apocalyptica?