概述

反编译是一个将目标代码转换成源代码的过程。而目标代码是一种用语言表示的代码 , 这种语言能通过实机或虚拟机直接执行。文本所要介绍的 JD-Eclipse 是一款反编译的开源软件,它是应用于 Eclipse 开发平台的插件,它可以帮助开发人员在调试程序的过程中显示所有的 Java 源代码,方便了开发人员的开发工作。

JD-Eclipse 的安装及配置

高级语言源程序经过编译变成可执行文件,反向编译就是其逆过程。但是由于反向编译的复杂性,通常不能把可执行文件变成高级语言源代码,只能转换成汇编程序。本文介绍了如何应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译,这种方法简单实用,运用 JD-Eclipse 插件应用于 RFT,使 RFT 具有更多方面的应用,方便了用户对 .class 文件的操作,不需要单独应用反向编译器进行方向编译的工作。

当 C 编译器编译生成一个对象的目标代码是,该目标代码是为某一个特定的硬件平台运行而产生的,在编译过程中,编译程序通过查表将所有符号的引用转换为特定的内存编译量。目标代码只能在特定的 CPU 上运行。而 Java 编译器为了保证目标代码的可移植性,并不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由 Java 虚拟机在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。由于其相对简单的 Java 虚拟机和规范的字节码格式,由 Java 字节码反编译成源代码的过程相对于 C 语言来说要简单,所以当前反编译 Java 程序非常流行。

目前有多种对于 Java 的反编译软件,下面本文将介绍一款开源的反编译软件 JD-Eclipse。JD-Eclipse 是一个插件 Eclipse 平台。它允许您调试所有的 Java 源代码。为了能够更为详实的说明 JD-Eclipse 的应用方法,下面主要介绍了 JD-Eclipse 的安装及配置过程,使开发人员能够更为快捷便利地使用。

目前有两种方式进行安装 JD-Eclipse 插件。第一种是利用 RFT 中“安装更新软件”的选项进行安装;下面本文将主要介绍手动安装的安装方法。

1. 下载相应的安装文件:jd.ide.eclipse_X.X.X.jar;jd.ide.eclipse.win32.x86_ X.X.X.jar;jd.edi.eclipse.feature_X.X.X.jar。其中 JD-Eclipse 插件提供了 Liunx,Mac 平台的相应的 jar 文件,本文以 Windows 平台为例作介绍。

2. 将 jd.ide.eclipse_X.X.X.jar;jd.ide.eclipse.win32.x86_ X.X.X.jar 这两个 jar 文件拷到安装 RFT 的文件夹中 plugins 的路径下面。

图 1. 拷入 jar 文件到 plugins 中

3. 将 jd.edi.eclipse.feature_X.X.X.jar 文件拷到安装 RFT 的文件夹中 features 的路径下面。

图 2. 拷入 jar 文件到 features 中

4. 重新启动 RFT。

5. 打开 RFT,Windows->Preferences->General->Editors->File Assciation,将 Class File Editor 设置为 default。

图 3. 设置默认显示

对于存在原始码的类,他不会强行反编译,也就是说他还是会用 eclipse 自带的 Class File Viewer 查看 class 文件。

JD-Eclipse 的使用及相关讨论

首先本节介绍了 JD-Eclipse 的应用方法,然后通过一个具体的应用实例来介绍 JD-Eclipse 的具体使用方法。文本采用 RFT 作为 Java 的开发平台,所以 JD-Eclipse 是安装在 RFT 上的一个插件进行相关讨论的。

一、JD-Eclipse 的应用方法

首先需要将反编译的文件打成 jar 的 java 包。

例如将文件 JavaTest 打成一个包,JavaTest 文件中有许多的 .class 文件。

图 4. Java 中的 .class 文件

jar 包生成方法如下面步骤所示。

1. 导入相应的工程。

2. 选择 Flie->Export->Jar file。

图 5. 选择 Jar 文件

3. 将 .class 文件导入并选择存储地址。

图 6. 导入工程

4. 生成一个 javatest.jar 文件

图 7. 生成 Jar 文件

二、JD-Eclipse 的应用实例

生成 jar 文件后需要将 jar 文件构建到工程文件中。

图 8 是没有反编译之前的所看到的文件内容。开发人员不能看到 .class 文件中的信息,对于开发人员调试代码带来的相对复杂的问题。

图 8. 反编译前的 .class 文件显示信息

采用 JD-Eclipse 插件后,可以清楚地显示出文件内容,方便开发人员的工作,也增强了开发人员在使用 RFT 过程中的方便程度。

清单 1. 以“CapturePlayback.class”为为例显示的部分代码内容

import java.awt.BasicStroke;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Component;

import java.awt.Container;

import java.awt.Dimension;

import java.awt.Font;

public CapturePlayback(){

super.setLayout(new BorderLayout());

EmptyBorder localEmptyBorder = new EmptyBorder(5, 5, 5, 5);

SoftBevelBorder localSoftBevelBorder = new SoftBevelBorder(1);

super.setBorder(new EmptyBorder(5, 5, 5, 5));

JPanel localJPanel1 = new JPanel();

localJPanel1.setLayout(new BoxLayout(localJPanel1, 0));

localJPanel1.add(this.formatControls);

JPanel localJPanel2 = new JPanel();

localJPanel2.setBorder(localSoftBevelBorder);

JPanel localJPanel3 = new JPanel();

localJPanel3.setBorder(new EmptyBorder(10, 0, 5, 0));

this.playB = addButton("Play", localJPanel3, false);

this.captB = addButton("Record", localJPanel3, true);

this.pausB = addButton("Pause", localJPanel3, false);

this.loadB = addButton("Load...", localJPanel3, true);

localJPanel2.add(localJPanel3);

public class Playback implements Runnable{

SourceDataLine line;

Thread thread;

public void start(){

CapturePlayback.this.errStr = null;

this.thread = new Thread(this);

this.thread.setName("Playback");

this.thread.start();

}

public void stop() {

this.thread = null;

}

private void shutDown(String paramString) {

if ((CapturePlayback.this.errStr = paramString) != null) {

System.err.println(CapturePlayback.this.errStr);

CapturePlayback.this.samplingGraph.repaint();

}

if (this.thread != null) {

this.thread = null;

CapturePlayback.this.samplingGraph.stop();

CapturePlayback.this.captB.setEnabled(true);

CapturePlayback.this.pausB.setEnabled(false);

CapturePlayback.this.playB.setText("Play");

}

}

}

三、JD-GUI 的介绍

JD-Core 也提供了独立的运行软件 JD-GUI,它的功能完全与 JD-Eclipse 插件一样,方便不能使用基于 Eclipse 平台的人员查看反编译的文件。

图 9. JD-GUI 的操作界面

将需要反编译的文件导入即可。

图 10. 导入需要反编译的文件

这款独立的运行软件提供了强大的编辑功能,方便了开发人员对于文件的编辑,处理等操作。

总结

本文向读者介绍了如何应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译,这种方法简单实用,运用 JD-Eclipse 插件应用于 RFT,使 RFT 具有更多方面的应用,方便了用户对 .class 文件的操作,不需要单独应用反向编译器进行方向编译的工作。相信 JD-Eclipse 能够帮助开发人员基于 RFT 的操作提供更为方便的插件应用,为开发人员调试程序提供一个较为便捷的方法。

java cap 反编译_应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译相关推荐

  1. java 插桩 工具_一个基于Eclipse的通用Java程序插桩工具.pdf

    第38卷第7期 计算机科学 V01.38NO.7 Science 2011 2011年7月 Computer July 一个基于Eclipse的通用Java程序插桩工具 郑晓梅 (南京中医药大学信息技 ...

  2. web项目java程序的作用_基础知识(javaWeb工程目录结构)及各文件夹的作用

    在Eclipse中只要创建一个Dynamic Web Project,就可以根据创建向导创建出一个典型Java Web站点的目录结构.除非有特殊需要,在大多数情况下都没有必要修改这个目录结构,这也是W ...

  3. java项目红叉_完美解决Eclipse导入的项目上有个红叉,但不影响项目运行的问题

    从别的eclipse导了个项目,导入后项目文件夹上显示一个红叉,但项目能跑通.检查了jdk.tomcat版本,都改正正确了,项目目录树里面每个文件夹里面的文件,src.xml都查了,都没发现问题. 后 ...

  4. java cap是什么_寒冬面试归来总结最新蚂蚁4面(Java):CAP+数据强一致性+分布式等...

    原标题:寒冬面试归来总结最新蚂蚁4面(Java):CAP+数据强一致性+分布式等 01 - 最新蚂蚁一面 1 自我介绍和项目 2 Java的内存分区 3 Java对象的回收方式,回收算法. 4 CMS ...

  5. java 结束调试快捷键_键盘快捷键-Eclipse终止调试/运行的捷径是什么?

    键盘快捷键-Eclipse终止调试/运行的捷径是什么? eclipse中终止调试/运行的快捷方式是什么? 在"首选项"->"键"下查看时,按Ctrl + ...

  6. java adt怎么使用_如何在eclipse中添加android ADT ADT插件的安装图文教程

    对于程序开发的学者来说,eclipse并不陌生,它为我们提供了一个非常广阔的平台来开发程序.同样我们也可以用它来开发android程序.但是在eclipse中并不能直接开发android程序,需要我们 ...

  7. java ee ide 添加spring,如何在Eclipse IDE项目文件夹中为spring添加jar文件

    I am going to start MVC with Spring framework, but I am unable to get jar file of spring framework . ...

  8. java grpc 服务路由_.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

    原标题:.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容 英文:devblogs.microsoft.com 来源:艾心 译文:cnblogs.com/ediso ...

  9. java 同步块 抛出异常_不把 wait 放在同步块中,为啥这种情况不会抛出 IllegalMonitorStateException?...

    这是一个来自 Java 编程思想的例子,它只是想表达 sleep 的线程可中断,但同步 IO 等待资源,或同步获得锁失败的线程,是不可同步的. //: concurrency/Interrupting ...

  10. java 对象序列化 数组_序列化-将任何对象转换为j中的字节数组

    您要执行的操作称为"序列化". 有几种方法可以做到,但是如果您不需要花哨的东西,我认为使用标准Java对象序列化就可以了. 也许您可以使用这样的东西? package com.ex ...

最新文章

  1. python实现高校教务管理系统_基于Python技术的教务管理系统的研究与开发
  2. 命令行下使用curl,采集数据遇到的问题。
  3. freerdp 解压安装_Ubuntu下编译安装运作FreeRdp连接Windows
  4. LeetCode刷题——Z字形变换
  5. GY编辑平台产品总结
  6. 【蓝桥杯单片机】NE555在CT107D上的使用
  7. 2星|《麦肯锡图表工作法》:用图表做商业分析的入门演示
  8. 大数据在零售业的应用
  9. SLAM会议笔记(三)V-LOAM
  10. 如何优化你的布局层级结构之RelativeLayout和LinearLayout及FrameLayout性能分析(一)...
  11. 为小程序添加底部导航
  12. Ubuntu16.04 安装火狐浏览器(中国版)
  13. 【数学建模】CUMCM历年题分类
  14. [麻将] 麻将的一些概率计算
  15. 如何使用计算机上合并计算方法,Excel2019中合并计算的使用方法
  16. ArcGIS水文分析实战教程(5)细说流向与流量
  17. 基于Springboot的在线租车,自租车,企业租车管理系统,基于Idea开发
  18. vue cli3 使用vue-svg-loader 出现Invalid Component definition报错
  19. 论文研究12:DUAL-PATH RNN for audio separation
  20. RV-LINK:将 GD32VF103C-START 开发板变成 RISCV-V 仿真器

热门文章

  1. 易飞ERP--自定义报表之采购价格分析功能表
  2. RN 启动开发服务器时报错 ReferenceError: SHA-1 for file
  3. 服务器多网卡同一网段
  4. Pygame实战:Python趣味编程之我的兔子终于变了游戏啦
  5. Python日报0507 - PyQt5实现打卡登记系统
  6. 李开复给大学生的第6封信:选择的智慧
  7. 超级小白的AOP之Springboot 日志工程
  8. python数据挖掘母亲和孩子身高预测_孩子身高预测公式 靠谱指数高达80分哦!
  9. java8新特性,stream流多种写法
  10. 云计算教程入门视频课件:云计算中心怎么选址?