项目作者: Bronsa

项目描述 :
A decompiler for clojure, in clojure
高级语言: Clojure
项目地址: git://github.com/Bronsa/tools.decompiler.git
创建时间: 2017-07-14T22:25:17Z
项目社区:https://github.com/Bronsa/tools.decompiler

开源协议:Eclipse Public License 1.0

下载


I gave a talk on tools.decompiler at Clojure/Conj in October 2017. Video here

Dependencies:

Leiningen:

  1. [bronsa/tools.decompiler "0.1.0-alpha1"]

Usage:

Use lein javac to AOT compile clojure.tools.decompiler.RetrieveClasses then you can use lein repl or clj to launch a repl

Use decompile-classfilesto decompile AOT compiled classes:

  1. user=> (require '[clojure.tools.decompiler :as d])
  2. nil
  3. user=> (d/decompile-classfiles {:input-path "path/to/root/classes/directory" :output-path "path/to/src"})
  4. ;; with no :output-path, decompile to stdout
  5. [...]

You can use decompile-classes to decompile in memory classes, but to do so you must start the JVM using the java agent provided with tools.decompiler (use e.g. lein jar to build the jar):

  1. [~/src/tools.decompiler] clj -J-javaagent:tools.decompiler.jar
  2. user=> (require '[clojure.tools.decompiler :as d])
  3. nil
  4. user=> (defn foo [a] a)
  5. #'user/foo
  6. user=> (decompile-classes {:classes #{"user$foo"}}) ;; optionally :output-path to decompile to disk
  7. Decompiling user$foo
  8. (fn foo
  9. ([a] a)
  10. nil