2017-01-12 9 views
1

私はPrologでバイトコードの静的解析をしようとしています。私はbcelライブラリを使ってMethodGenから命令リストを取得しています。 aload_0については、 0:aload_0[42](1)Javaバイトコード命令を理解する助けが必要です

私はaload_0が0番目のローカル変数をロードすることを意味すると理解しています。しかし、次のビット、つまり[42](1)を理解するのは苦労しています。他の指示のためにもあります。例:

invokespecial[183](3) 8 
return[177](1) 

誰かが説明できるものはありますか?それは非常に感謝しますか?

+0

のJava APIを使用する通常の方法は、名前が通常自己説明、むしろ 'のtoStringのフォーマットについての当て推量を行うよりも、クラスのメンバーを介してオブジェクトのプロパティを照会することです()'出力。それ以外にも、[文書化されている](https://commons.apache.org/proper/commons-bcel/apidocs/org/apache/bcel/generic/Instruction.html#toString-boolean-): '長い出力形式: "<オペコード番号>" ""( "<命令の長さ>") "' – Holger

+0

@Holger私に教えていただきありがとうございます。それをここに答えて印を付けるのを忘れた。 –

答えて

2

42aload_0のオペコードです。 183invokespecialのオペコードです。 177は返品などです。 invokespecialの後の8は、おそらく命令が使用する16ビットの定数プールインデックスです。

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-7.html

+0

OPは正しい書式設定に失敗しました。文字列は実際には[invokespecial [183]​​(3)8'で、[documentation]と一致します(https://commons.apache.org/proper/commons-bcel/apidocs ""長出力形式:<オペコード名> "[" <オペコード番号> "]" "(" <命令長> ")"/" "<" ">" '、あなたの推測は正しいですが、OPは私たちに推測を求めるのではなく、ドキュメントを読むべきです... – Holger

関連する問題