2011-12-01 97 views
1

我有以下如何從mangled名稱獲取方法參數列表?

<method name="visitNode" 
     signature="(Lchs/cof/drawplus/IJoint;Lchs/cof/logical/schem/ISegment;Lchs/analysis/GraphServices$IGraphVisitor;I)Z" 

簽名是Java的方法重整名稱在cobertura.xml信息。 (http://asm.ow2.org/doc/faq.html#Q7

如何構造方法參數列表,如下所示。

boolean visitNode(drawplus.IJoint root, 
      schem.ISegment segmentBefore, 
      IGraphVisitor visitor, 
      int branch) 

是否有一個圖書館可以做到這一點去除?

回答

2

您可以從方法描述符中提取參數和結果的類型,但不能提取參數名稱。

我不知道會做這種提取的庫,但我確信這段代碼已經執行了幾次。實現你自己並不困難。方法描述符字符串的語法在Java虛擬機規範 - JVMS 4.3.3中指定。

+0

我同意。使用另一個庫可能會矯枉過正。 – Jayan

+0

@Jayan - 我不一定會說這太過分了......如果你能找到一個提供了一個簡單的API來做到這一點的庫。我只是指出,如果你需要編寫自己的代碼來完成它,這不是一個很大的問題。 –

2

JD Core應該爲你做這一切。但是,它是一個C++庫,所以它可能不適用於你。 BCEL (Byte Code Engineering Library允許您創建,分析和修改二進制文件,這些文件應該符合您的要求。 BCEL是用java編寫的。
如果類文件沒有使用調試標誌編譯,那麼參數名稱可能是通用的。

1

下面是對規則的再現,因爲這個問題在這個主題的搜索結果中顯得很高。下面的細節來自原始問題中的鏈接。

原始表示:

  • V - void
  • Z - boolean
  • C - char
  • B - byte
  • S - short
  • I - int
  • F - float
  • J - long
  • D - double

類的表示:

  • L<class>;
  • Ljava/io/ObjectOutput;
  • Ljava/lang/String;