量産メモ帳

忘れっぽいのでメモを残しています。浅く適当に書きます。

Javaのclassファイルやjarファイルを逆アセンブルする。

スポンサーリンク

Java の class ファイルを逆アセンブルするコマンドとして javap というものが JDK に用意されています。

class ファイルはバイトコードなのでテキストエディタで開いても分かり難いですけど、javap コマンドで逆アセンブルしたものならテキストエディタで読めるようになります。
自分もたまに使いますが、使い方を忘れてしまうのでメモを残しておきます。

  • クラスパスのルートディレクトリを現在のディレクトリとして、x.y パッケージにある Z という class ファイルを逆アセンブルして、Z.javap というファイルに出力する場合:

javap -classpath . -verbose x.y.Z.class > Z.javap


  • xyz.jar という jar ファイル内のクラスを一括で逆アセンブルして、xyz.javap というファイルに出力する場合:

zipinfo -1 xyz.jar \*.class| sed 's/\.class//' | xargs javap -classpath xyz.jar -verbose > xyz.javap


  • ディレクトリ直下にある全ての jar ファイル内のクラスを一括で逆アセンブルして、jar ファイルごとに結果を出力する場合:

for j in `ls *.jar`; do zipinfo -1 ${j}.jar \*.class| sed 's/\.class//' | xargs javap -classpath ${j}.jar -verbose > ${j}.javap; done



なお、逆アセンブルしたファイルに出力された aload とかの命令の説明や一覧は Oracle のサイトにあります。



Wikipedia の方が分り易いかも。



参考記事: