![](/img/trans.png)
[英]How to use javap to see what lines of bytecode correspond to lines in the Java code?
[英]java javap and groovy bytecode comparison
這是javap
在我要求他顯示我編譯的類時生成的代碼(我選擇的方法)
int multiply(int, int);
flags:
Code:
stack=2, locals=3, args_size=3
0: iload_1
1: iload_2
2: imul
3: ireturn
LineNumberTable:
line 2: 0
LocalVariableTable:
Start Length Slot Name Signature
0 4 0 this LMyClass;
0 4 1 a I
0 4 2 b I
這是代碼,由groovyConsole
顯示(相同方法)
public multiply(II)I
L0
LINENUMBER 4 L0
ILOAD 1
ILOAD 2
IMUL
IRETURN
L1
LDC 0
IRETURN
LOCALVARIABLE this LMyClass; L0 L1 0
LOCALVARIABLE a I L0 L1 1
LOCALVARIABLE b I L0 L1 2
MAXSTACK = 2
MAXLOCALS = 3
但哪個字節碼更raw
? 據我所知, javap
為它添加了一些樣式,所以第二個例子應該是更真實的bytecode
。 我對嗎?
這些都不是更原始的。 只有兩種不同的方式來呈現完全相同的信息。
看起來Javap和Groovy都做了一些糖,但是以不同的方式,所以你不能說一個比另一個更“原始”。 例如,Groovy顯示Javap糖的原始方法描述符(II)I
,而Javap顯示堆棧和本地計數,而Groovy則不顯示。
話雖這么說,但兩者都不是特別“原始”。 Javap旨在幫助Java調試,所以它試圖隱藏或重寫一些東西,以使輸出更像Java。 它的設計目的不是處理異常或惡意構造的類文件。
如果您想要最“原始”的反匯編輸出,您最好的選擇是Krakatau反匯編程序 。 Krakatau是唯一可以表示任意類文件中每個小細節的反匯編程序,包括非java和惡意構造的類文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.