JD-Core 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
JD-Core 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
JD-Core 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
JD-Core 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
JD-Core 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 GPLv3
开发语言 Java
操作系统 跨平台
软件类型 开源软件
所属分类 开发工具反编译工具
开源组织
地区 不详
投 递 者 红薯
适用人群 未知
收录时间 2019-05-26

软件简介

JD-Core 是 Java 反编译开发包,基于这个开发包有一个 GUI 的项目 jd-gui 和一个 Eclipse 插件项目 jd-eclipse

编译 jd-core 的方法:

> git clone https://github.com/java-decompiler/jd-core.git
> cd jd-core
> ./gradlew build

使用方法:

  1. 实现 jd.core.loader.Loader 接口,
  2. 实现 jd.core.printer.Printer 接口,
  3. 调用方法 "decompile(loader, printer, internalTypeName);"

 示例代码:

  1. Implement the Loader interface:
Loader loader = new Loader() {
    @Override
    public byte[] load(String internalName) throws LoaderException {
        InputStream is = this.getClass().getResourceAsStream("/" + internalName + ".class");

        if (is == null) {
            return null;
        } else {
            try (InputStream in=is; ByteArrayOutputStream out=new ByteArrayOutputStream()) {
                byte[] buffer = new byte[1024];
                int read = in.read(buffer);

                while (read > 0) {
                    out.write(buffer, 0, read);
                    read = in.read(buffer);
                }

                return out.toByteArray();
            } catch (IOException e) {
                throw new LoaderException(e);
            }
        }
    }

    @Override
    public boolean canLoad(String internalName) {
        return this.getClass().getResource("/" + internalName + ".class") != null;
    }
};
  1. Implement the Printer interface
Printer printer = new Printer() {
    protected static final String TAB = "  ";
    protected static final String NEWLINE = "\n";

    protected int indentationCount = 0;
    protected StringBuilder sb = new StringBuilder();

    @Override public String toString() { return sb.toString(); }

    @Override public void start(int maxLineNumber, int majorVersion, int minorVersion) {}
    @Override public void end() {}

    @Override public void printText(String text) { sb.append(text); }
    @Override public void printNumericConstant(String constant) { sb.append(constant); }
    @Override public void printStringConstant(String constant, String ownerInternalName) { sb.append(constant); }
    @Override public void printKeyword(String keyword) { sb.append(keyword); }
    @Override public void printDeclaration(int flags, String internalTypeName, String name, String descriptor) { sb.append(name); }
    @Override public void printReference(int flags, String internalTypeName, String name, String descriptor, String ownerInternalName) { sb.append(name); }

    @Override public void indent() { this.indentationCount++; }
    @Override public void unindent() { if (this.indentationCount > 0) this.indentationCount--; }

    @Override public void startLine(int lineNumber) { for (int i=0; i<indentationCount; i++) sb.append(TAB); }
    @Override public void endLine() { sb.append(NEWLINE); }
    @Override public void extraLine(int count) { while (count-- > 0) sb.append(NEWLINE); }

    @Override public void startMarker(int type) {}
    @Override public void endMarker(int type) {}
};
  1. And call the method "decompile(loader, printer, internalTypeName);"
ClassFileToJavaSourceDecompiler decompiler = new ClassFileToJavaSourceDecompiler();

decompiler.decompile(loader, printer, "path/to/YourClass");

String source = printer.toString();
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2014/10/26 15:53

JD-GUI与JD-Eclipse

JD即Java Decompiler:是Java反编译器 JD-GUI是独立的软件,JD-Eclipse则是eclipse插件啦。 官网:http://java.decompiler.free.fr/

0
0
发表了博客
2019/08/23 16:27

JD-GUI

https://github.com/java-decompiler/jd-gui https://github.com/java-decompiler/jd-gui/releases JD-GUI, a standalone graphical utility that displays Java sources from CLASS files. Java Decompiler projects home page: http://java-decompiler.github.io JD-GUI source code: https://github.com/java-decompiler/jd-gui Description JD-GUI is a standalone graphical utility that displays Java source codes of "...

0
0
发表了博客
2013/01/17 20:50

jd-gui

http://java.decompiler.free.fr/ jd-gui

0
0
发表了博客
2014/03/04 17:45

jd-core java反编译工具

想做一个在线java反编译工具,找了http://jd.benow.ca/ http://varaneckas.com/jad/ 这两个工具。 前一个工具比较好,但是jd-core不没有提供下载。详见 http://zhouliang.pro/2010/06/26/jad/ 搜索中发现了这个项目 https://github.com/nviennot/jd-core-java/ JD-Core-java is a thin-wrapper for the Java Decompiler. This is hack around the IntelliJ IDE plugin. It fakes the interfaces of the IDE, and provides acce...

0
3
发表了博客
01/26 10:58

群晖docker安装jd脚本工具(jd_base)

年底了,电商平台的活动越来越多,原本手动的点击的,现在发现根本点击不过来,于是就想写一下这次在群晖上的docker上的安装教程 在群晖套件中找到docker套件,点击安装 安装完成之后,点击docker套件,进入注册表页面,搜索栏中输入jd,并下载如下容器。 下载完成之后点击来到映像页面,点击刚下载好的docker image,在点击启动 启动后,点击高级设置,来到高级设置页面。把启动自动重新启动勾上,再来点击到卷页面 来到卷页面...

0
0
发表于软件架构专区
2018/12/24 23:35

面试系列-JD

常见的JD要求: 1.Java基础扎实,熟悉设计模式、IO、多线程、集合,JVM,数据结构与算法 2.Spring,SpringMVC,Mybatis 框架 3.数据库,Mysql,sql调优,数据库原理 4.缓存、消息队列、消息等中间件,熟练掌握,在工作中合理应用 5.Dubbo/Spring Cloud 或其他服务治理框架架构,熟练掌握 其中,java基础设计模式等和开源框架、数据库等是最基本的要求,最近在面试的时候,一般都会被问到,是否熟悉分布式系统开发,包括缓存、 ...

0
0
发表了博客
2019/01/08 10:43

京东JD实战

1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="UTF-8"> 6 <title>京东JD</title> 7 <link rel="stylesheet" href="css/baseJD.css" /> 8 <link rel="icon" href="img/favicon.ico"> 9 </head> 10 11 <body> 12 <!--nav开始--> 13 <div class="site-nav"> 14 <div class="w"> 15 <...

0
0
发表了博客
2018/07/23 18:36

Mac 安装jd-gui

安装brew 命令行输入 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 回车 安装jd-gui brew cask install jd-gui

0
0
发表了博客
2020/08/25 14:32

从零开始学习 JD CHAIN(一)- 快速部署 JD CHAIN

此文章系列计划记录本人从零开始学习JD Chain的历程,因为是从零开始,理所当然会有许多理解不够深入的地方,还望各位同好及时指正错误,共同成长。不定期更新,但尽量坚持下去,分享文章也是想立个Flag,让大家监督我的学习进度。 JD Chain 是京东区块链开发团队自主研发的,专门为企业应用设计的区块链框架系统,适用多种通用业务场景。不同于超级账本(Hyperledger Fabric)生态和企业级以太坊联盟(Enterprise Ethereum Allian...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
21 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部