反汇编 Scala 代码
Disassembling Scala code
如何反汇编 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
你知道你可以在 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
...
您对输出进行了一些搜索,因为它包含外部模块和更多信息。
如何反汇编 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
你知道你可以在 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
...
您对输出进行了一些搜索,因为它包含外部模块和更多信息。