2011-12-01 100 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;