javapでデコンパイルする
言語 | バージョン |
---|---|
java | openjdk version “11.0.3” 2019-04-16 LTS |
昔はjadやjd-eclipseなどでデコンパイルができましたが、今はjavapコマンドである程度デコンパイルすることが出来ます。
Eclipseのプラグインだと今は「Enhanced Class Decompiler」が有名です。
javap
とタイプして実行すればオプションが表示されます。
-pオプション すべてのメソッド・メンバ
AccountControllerクラスがあるとして、javap -p AccountController.class
で以下のようにメソッドとその引数の型が表示されます。
C:\>javap -p AccountController.class Compiled from "AccountController.java" public class com.example.demo.controller.AccountController { private final com.example.demo.repository.AccountRepository accountRepository; public org.springframework.http.ResponseEntity<?> getAllList(); public org.springframework.http.ResponseEntity<?> getAgeList(java.lang.Integer); public org.springframework.http.ResponseEntity<?> newAccount(java.lang.Integer, java.lang.String, java.lang.Integer); public org.springframework.http.ResponseEntity<?> update(java.lang.Integer, java.lang.String, java.lang.Integer); public org.springframework.http.ResponseEntity<?> updateName(java.lang.Integer, java.lang.String); public org.springframework.http.ResponseEntity<?> deleteAccount(java.lang.Integer); public com.example.demo.controller.AccountController(com.example.demo.repository.AccountRepository); }
-publicオプション publicクラスおよびメンバ
publicなクラスやメンバのみを表示したい場合は、javap -public AccountController.class
で以下のようにメソッドとその引数の型が表示されます。privateフィールドが非表示になっています。
C:\>javap -public AccountController.class Compiled from "AccountController.java" public class com.example.demo.controller.AccountController { public org.springframework.http.ResponseEntity<?> getAllList(); public org.springframework.http.ResponseEntity<?> getAgeList(java.lang.Integer); public org.springframework.http.ResponseEntity<?> newAccount(java.lang.Integer, java.lang.String, java.lang.Integer); public org.springframework.http.ResponseEntity<?> update(java.lang.Integer, java.lang.String, java.lang.Integer); public org.springframework.http.ResponseEntity<?> updateName(java.lang.Integer, java.lang.String); public org.springframework.http.ResponseEntity<?> deleteAccount(java.lang.Integer); public com.example.demo.controller.AccountController(com.example.demo.repository.AccountRepository); }
-lオプション 行番号とローカル変数表を表示
-lオプションを使用するとデコンパイルしてくれます。
C:\>javap -l AccountController.class Compiled from "AccountController.java" public class com.example.demo.controller.AccountController { public org.springframework.http.ResponseEntity<?> getAllList(); LineNumberTable: line 31: 0 line 32: 10 line 33: 18 line 34: 26 LocalVariableTable: Start Length Slot Name Signature 0 38 0 this Lcom/example/demo/controller/AccountController; 10 28 1 allList Ljava/util/List; 18 20 2 map Ljava/util/HashMap; public org.springframework.http.ResponseEntity<?> getAgeList(java.lang.Integer); LineNumberTable: line 43: 0 line 44: 11 line 45: 19 line 46: 27 LocalVariableTable: Start Length Slot Name Signature 0 39 0 this Lcom/example/demo/controller/AccountController; 0 39 1 age Ljava/lang/Integer; 11 28 2 ageList Ljava/util/List; 19 20 3 map Ljava/util/HashMap; public org.springframework.http.ResponseEntity<?> newAccount(java.lang.Integer, java.lang.String, java.lang.Integer); LineNumberTable: line 58: 0 line 59: 9 line 60: 15 line 61: 21 line 62: 27 line 64: 39 line 65: 50 line 66: 59 line 67: 69 LocalVariableTable: Start Length Slot Name Signature 0 82 0 this Lcom/example/demo/controller/AccountController; 0 82 1 accountId Ljava/lang/Integer; 0 82 2 name Ljava/lang/String; 0 82 3 age Ljava/lang/Integer; 9 73 4 accountEntity Lcom/example/demo/entity/AccountEntity; 50 32 5 postList Ljava/util/List; 59 23 6 map Ljava/util/HashMap; public org.springframework.http.ResponseEntity<?> update(java.lang.Integer, java.lang.String, java.lang.Integer); LineNumberTable: line 79: 0 line 80: 14 line 81: 23 line 82: 33 LocalVariableTable: Start Length Slot Name Signature 0 46 0 this Lcom/example/demo/controller/AccountController; 0 46 1 accountId Ljava/lang/Integer; 0 46 2 name Ljava/lang/String; 0 46 3 age Ljava/lang/Integer; 14 32 4 updateCnt Ljava/lang/Integer; 23 23 5 map Ljava/util/HashMap; public org.springframework.http.ResponseEntity<?> updateName(java.lang.Integer, java.lang.String); LineNumberTable: line 92: 0 line 93: 12 line 94: 21 line 95: 30 LocalVariableTable: Start Length Slot Name Signature 0 43 0 this Lcom/example/demo/controller/AccountController; 0 43 1 accountId Ljava/lang/Integer; 0 43 2 name Ljava/lang/String; 12 31 3 updateCnt Ljava/lang/Integer; 21 22 4 map Ljava/util/HashMap; public org.springframework.http.ResponseEntity<?> deleteAccount(java.lang.Integer); LineNumberTable: line 104: 0 line 105: 11 line 106: 19 line 107: 27 LocalVariableTable: Start Length Slot Name Signature 0 39 0 this Lcom/example/demo/controller/AccountController; 0 39 1 accountId Ljava/lang/Integer; 11 28 2 deleteCnt Ljava/lang/Integer; 19 20 3 map Ljava/util/HashMap; public com.example.demo.controller.AccountController(com.example.demo.repository.AccountRepository); LineNumberTable: line 18: 0 LocalVariableTable: Start Length Slot Name Signature 0 10 0 this Lcom/example/demo/controller/AccountController; 0 10 1 accountRepository Lcom/example/demo/repository/AccountRepository; }
-cオプション 逆アセンブル
-cオプションで逆アセンブルしてくれます。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
資格:少額短期保険募集人,FP3級,宅建士
コメント