- - PR -
BCELの使用法について
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2002-12-15 18:33
javaにて、クラスファイル(×××.class)の構造を分析する事になりまして、
何かいいライブラリはないかと探した所、jakartaプロジェクトのBCELなるものが 利用できるのではないかと思い早速ダウンロードしてみました。 そこで、マニュアルなるページや、APIリファレンスを読んでみたんですが、 私としては、マニュアルや、APIリファレンスのみですと、概要程度しか理解できず、 BCELを使いこなす所まではたどりついておりません。 もちろん、これからも理解を深める事は言うまでもありませんが、 もし、BCELを利用する上で何か役に立つ情報やサイトがありましたら、 お教えして頂けないでしょうか? | ||||
|
投稿日時: 2002-12-15 21:29
exampleのソースをみるのが一番早いですよ。exampleの実行結果と、
ソースとを比べて、適当に直してつかってれば、そのうち分かるよう になります。 byteファイルの構造を知ってればさほど難しくないですよ。 | ||||
|
投稿日時: 2002-12-15 21:35
検索してみましたが、APIドキュメントより分かりやすい解説は見つかりませんでした。
お役に立てるか分かりませんが、具体的にお困りの点は何でしょうか? | ||||
|
投稿日時: 2002-12-16 10:59
Kissingerさん、t-wataさん、ありがとうございます。
私が今、やれることは、JavaClassクラスに指定したクラスファイルをパースして、 その中のメソッド一覧、フィールド一覧をMethodクラス、Fieldクラスに取得する所までは できたんですが、これらの型、メソッドならばパラメーター等の情報やローカル変数の情報を どうやってアクセスして得ればいいのか?というのがまだ見えておりません。 上記の情報を属性として例えるならば、これらの属性はMethodクラス、Fieldクラスにどのように 関わっているのか?という事が見えてないと言う事だと思います。 また、メソッドの情報としてメソッド内にどういったローカル変数があるのか? というのも見えておりません。 byteファイルの構造を先に勉強して、APIドキュメントを参考にBCELを使用してみようとしたのですが、 結局は、byteファイルの構造がわかっていない為の疑問になっていると思い、平行してbyteファイルの 構造も再度勉強している最中です。 以下に、この時点での私の理解度を示します。 (特別パッケージ名を指定しない場合は「org.apache.bcel.classfile」だと思って下さい。) 1.JavaClassにクラスファイルをパースする。 (これで、クラスファイルがオブジェクトとして操作できる) 2.JavaClassの[] getMethods()を使用してMethodオブジェクトを取得する。 (これで、メソッドがオブジェクトとして操作できる) 3.2にて取得したMethodオブジェクトからアクセスフラグ、メソッド名を取得する。 (MethodsクラスはAccessFlagsクラスを継承している為、これらの操作が行える) 4.Fieldクラスにおいても、2,3と同様の処理を行う。 byteファイル構造の理解度を深め、APIドキュメントと照らし合わせながらBCELの使用方を つかんで行こうと思います。 私の考え方で何か誤っている部分や、もっとこうした方がいいと言う物が ありましたら、また、ご意見お願いいたします。 | ||||
|
投稿日時: 2002-12-16 13:05
目的が分からないので何とも言えません。
これだけなら、java.lang.reflectでできます。 BCELを使う目的は何でしょうか? また、以下のソースはご覧になりましたか? http://bcel.sourceforge.net/listclass.java これを改造するだけで大抵の事はできますよ。 | ||||
|
投稿日時: 2002-12-16 23:24
おじゃるまるさん、それだけわかっていたら大抵のことできちゃいますよ。
でも、フィールドやメソッドのパラメタを確認するだけなら、t-wataさんの 言うとおり reflectパッケージの方が楽です。フィールドの値を読んだり、 メソッドを呼び出すテストツール等も作ることができます。(多分、おじゃ るまるさん自身ご存知な気がするのですが。) ただ、関連するクラスが揃ってない(一部のクラスしかない)時にはローデ ィングできませんので、BCELの様にクラスファイルを扱う仕組みが役に立ち ます。(工夫が要るけど) あと、逆アセンブラ、逆コンパイラを作る羽目になったときにも役立つでし ょう。 | ||||
1
