web-dev-qa-db-ja.com

Javaバイトコードでのプログラミング

Javaバイトコードで短いプログラム(おそらくHello World)を書きたいと思っています。テキストエディタを使用してバイトコードを書き、実行したいだけです。どうすればよいですか?例?ありがとう!

47
Corey Stevens

あなたは試すことができます ジャスミン

.class public HelloWorld
.super Java/lang/Object

.method public static main([Ljava/lang/String;)V
  .limit stack 3
  .limit locals 1

  getstatic      Java/lang/System/out Ljava/io/PrintStream;
  ldc            "Hello World."
  invokevirtual  Java/io/PrintStream/println(Ljava/lang/String;)V

  return

.end method

以下を使用してコンパイルします。

> Java -jar jasmin.jar hello.j 

そして、あなたはそれを他のクラスのように実行します:

> Java HelloWorld 
 HelloWorld。

更新

あなたの質問は「JavacやJavaを使わずに」と言っているようです。その声明の意味を明確にしていただけますか?

44
Adam Paynter

新しい Javaバイトコードアセンブラ を作成しました。これは、Jasminと下位互換性がありますが、多くの新機能を追加し、構文をわずかに簡略化します。

これは、HelloWorldプログラムを作成する方法の例です。

.class public hello
.super Java/lang/Object

.method public static main : ([Ljava/lang/String;)V
    .limit stack 10
    .limit locals 10

    getstatic Java/lang/System out Ljava/io/PrintStream;
    ldc "Hello World!"
    invokevirtual Java/io/PrintStream println (Ljava/lang/Object;)V
    return
.end method

バイトコードアセンブリに関するチュートリアルも書きました 。現在はHello、Worldのみをカバーしていますが、興味があれば続行できます。

9
Antimony

バイトコードは実際のバイトとして書き込まれますが、通常のテキストエディターでは簡単に編集できません。

これは、テキスト表現をバイナリに変換するものが必要になることを意味します。開始するのに妥当な場所は、 Jasmin のようなアセンブラーです。

[〜#〜] jbe [〜#〜] (Javaバイトコードエディタ)を検討しましたか?
これは、Apacheのバイトコードエンジニアリングライブラリに基づいています( [〜#〜] bcel [〜#〜]

8
bjg

多分この記事があなたを始めるのに役立つかもしれません: Bytecode basics (少し古いが、あなたはアイデアを得るでしょう).

クラスファイル形式 も便利です:D

8
user159088

この男は、HelloWorldプログラムのクラスファイルを作成するプロセスを段階的に説明します。かなりエキサイティングなもの:-) https://medium.com/@davethomas_9528/writing-hello-world-in-Java-byte-code-34f75428e0ad

0
Peter Perháč