反汇编Scala代码

时间:2015-04-21 23:22:33

标签: scala disassembly

如何反汇编Scala代码?可以在没有首先构建Jar并对生成的.class文件进行反编译的情况下完成吗?有没有其他更快的方法来做到这一点?

对于Python,dis可以按如下方式使用:

def myfunc(alist):
    return len(alist)

>>> dis.dis(myfunc)
  2           0 LOAD_GLOBAL              0 (len)
              3 LOAD_FAST                0 (alist)
              6 CALL_FUNCTION            1
              9 RETURN_VALUE

1 个答案:

答案 0 :(得分:5)

你知道你可以在REPL中做到这一点:

scala> def foo[A](xs: Seq[A]) = xs.size
foo: [A](xs: Seq[A])Int

scala> :javap foo
  Size 714 bytes
...
public <A extends java/lang/Object> int foo(scala.collection.Seq<A>);
  flags: ACC_PUBLIC
  Code:
    stack=1, locals=2, args_size=2
     0: aload_1       
     1: invokeinterface #20, 1 // InterfaceMethod scala/collection/Seq.size:()I
     6: ireturn       
...

您在输出中抓取了一些内容,因为它包含外部模块和更多信息。