javap の使い方 – Java クラスファイル逆アセンブラ。

それなりの頻度で必要になるのに、いつもド忘れしている「javap」の存在を、日記に書き殴る事で記憶に残したい。

やりたいことは、

  • お手軽にフィールドやメソッドの一覧表を作成したい
  • 「俺ってクラスファイルを逆アセンブルで解析できるんだぜ?」なスーパーハカーになりたい

です。きっと。たぶん。

早速開始。

$ cd ~/java
$ java -version
java version "1.5.0_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-164)
Java HotSpot(TM) Client VM (build 1.5.0_07-87, mixed mode, sharing)

とりあえず、適当にコードを書いてみる。pakageはsampleにしてみた。

$ cat sample/HelloWorld.java
package sample;
public class HelloWorld {
  private String hello;
  private String world;
  public HelloWorld() {
    hello = "Hello";
    world = "World";
  }
  public void say()  {
    System.out.println(this.doSomething());
  }
  private String doSomething() {
    return this.hello + this.world;
  }
}

はい。特に意味はナイです。プライベートフィールド2、コンストラクタ1、プライベートメソッド1、と。

$ javac sample/HelloWorld.java

↑コンパイル。↓逆コンパイル。

$ javap sample/HelloWorld
Compiled from "HelloWorld.java"
public class sample.HelloWorld extends java.lang.Object{
  public sample.HelloWorld();
  public void say();
}

おお、出来てる!!

privateも覗きみたいので、オプション指定する。

$ javap -private sample/HelloWorld
Compiled from "HelloWorld.java"
public class sample.HelloWorld extends java.lang.Object{
  private java.lang.String hello;
  private java.lang.String world;
  public sample.HelloWorld();
  public void say();
  private java.lang.String doSomething();
}

興味深いね!!

他にはどんなオプションがあるのかな♪

$ javap -help

※注:長いので省略されました。。

なるへそ!!

もう少し詳しく知るためには、

すると良いよ。あと、

も良いよね、今日は書かなかったけど。jad 最高。

これで、'''既存のクラスファイルからJavadoc風Excel仕様書を作成する'''、という 時間の無d 有意義な業務を効率化できるね。

生産性は向上だね。給料は現状維持だね。

にほんのひまじん について

フリーのサラリーマン
カテゴリー: 俺様のこと タグ: パーマリンク