Javaプログラミング/Javaプログラミング関連情報

クラスファイルを強制変換する(3ページ目)

Javassistで、クラスファイル変換を使ってクラスの中身を変えてしまいましょう。

執筆者:掌田 津耶乃

クラスファイルの中身を調べる


これだけでは本当にクラスファイルが修正されているのかちょっと不安だ、という人もいることでしょう。実際に変更されているのか、TestBean.classをデコンパイルしてみました(デコンパイルに使用したのはjadです。jadについては[禁断の必殺技?「デコンパイラ」を使う]を参照ください)。以下がTestBean.classから生成されたソースコードです。

package jp.tuyano.jasample;

import java.io.PrintStream;

public class TestBean
{

 public String testfield;
 int addfield;

 public TestBean()
 {
  testfield = "helo";
 }

 public void test()
 {
  System.out.println(testfield);
 }

 public void addmethod()
 {
  System.out.println("add this method.");
 }
}


元の状態のTestBeanはどうなっていたか?というと、以下のようになっています。これも、TestBean.classからデコンパイルで生成したものです。

package jp.tuyano.jasample;

import java.io.PrintStream;

public class TestBean
{

 public String testfield;

 public TestBean()
 {
  testfield = "helo";
 }

 public void test()
 {
  System.out.println(testfield);
 }
}


確かに、addfieldとaddmethodがプログラム実行後のTestBean.classに追加されていることがわかります。実に簡単にクラスが操作できてしまうでしょう?

若干、ソースコードが元のクラスと違っているのは、Javaのコンパイラがコンパイルする際にソースコードを若干改変しているためです。java.io.PrintStreamがimportされていたり、フィールドへの値の代入がコンストラクタで行なわれていたりするのはこのためで、Javassistによる変換とは関係ありません。元のクラスでもこれらは含まれていますからわかりますね。


  • 前のページへ
  • 1
  • 2
  • 3
  • 4
  • 5
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます