簡體   English   中英

java javap和groovy字節碼比較

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM