それなりの頻度で必要になるのに、いつもド忘れしている「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 有意義な業務を効率化できるね。
生産性は向上だね。給料は現状維持だね。