`

Retrotranslator:java逆向移植工具

 
阅读更多
1.JDK每次升级新增的功能大致可以分为4类:
①在编译层面做的改进.如自动装箱拆箱,实际上就是编译器在程序中使用到包装对象的地方自动插入很多Integer.valueOf()之类的代码,泛型的信息在编译阶段就被擦除,相应的地方被编译器自动插入了类型转换代码.
②对Java API的代码增强.如在JDK1.2中增加了java.util.Collections等一系列集合类,在JDK1.5中增加了并发包
③需要在字节码中进行支持的改动.如在JDK1.7中增加了动态语言支持,就需要在虚拟机中增加一条invokedynamic字节码指令来实现相关的调用功能.(字节码指令集一直处于较稳定状态,这种需要在字节码层面直接进行的改动很少见)
④虚拟机内部的改进,如在JDK1.5中实现的JSR-133规范(Java内存模型和线程规范修订)中重新定义的java内存模型,CMS收集器之类的改动,这些改动对程序员编写的代码是透明的,但是对程序运行会产生影响.

2.Retrotranslator作用:将JDK1.5(主版本号49)编译出来的class文件转变为可以在JDK1.4或1.3上部署的版本.它可以很好的支持1.5新增的特性,如自动装箱,泛型,动态注解,枚举,变长参数,遍历循环,静态导入这些语法,甚至还可以支持JDK1.5中新增的集合改进,并发包以及泛型,注解等的反射操作.

3.Retrotranslator只能模拟JDK升级功能中的前两类(在编译层面的改进和对Java API的代码增强).
3.1 模拟在编译层面的改进:Retrotranslator使用ASM框架直接对字节码进行处理.虽然字节码指令的数量没有变化,但是元信息和一些支持的语法需要改进.如枚举类型,在JDK1.5中,增加了enum关键字,但是Constant_Class_info的语义并没有发生变化.貌似Enum跟接口和类是一个层次,实际上javac编译器做出来的假象.从字节码的角度上,枚举仅仅是继承于java.lang.Enum,自动生成了values和valuesOf()方法的普通java类而已.
Retrotranslator对枚举类型的处理:把枚举类型的父类从java.lang.Enum替换为它运行时类库中包含的"net.sf.retrotranslator.runtime.java.lang.Enum_",然后再在类和字段的方位标志access_flag中抹去ACC_ENUM标志位(当然,net.sf.retrotranslator.runtime.java.lang.Enum_需要重写values()和valuesOf()
方法).

3.2模拟在Java API的代码增强:在JDK1.5中,引入了并发包(java.util.concurrent包),它实际上是由多线程大师Doug Lea开发的一套并发包,在JDK1.5之前就存在,在引入JDK的时候,作者和JDK开发团队共同做了一些改进而已.所以,要在旧版本的JDK中实现这部分功能,只需要独立引入类库就能实现(如引入backport-util-concurrent.jar).
分享到:
评论

相关推荐

    MTK6582快捷逆向移植工具_联发科MT6582逆向移植工具_

    MTK6582快捷逆向移植工具是针对联发科MT6582处理器的固件移植开发的专用软件。联发科MT6582是一款基于ARM Cortex-A7架构的四核移动处理器,常见于中低端智能手机和平板电脑。这款处理器在2013年发布,因其性能和成本...

    SkidSuite:Java逆向工程工具和信息链接的集合

    SkidSuite 3是与Java应用程序的逆向工程有关的有用工具的集合。 目录 文章标题 描述 链接到自动去模糊工具。 链接到手动重新映射工具。 链接到反编译器。 将字节码转换为源代码。 链接到字节码编辑器。 用于处理已...

    JAD:Java反编译工具

    **JAD:Java反编译工具** Java反编译工具(JAD)是开发者和逆向工程人员在处理Java字节码时所使用的工具。它能够将已经编译过的Java类文件转换回源代码,这对于理解已有的二进制代码、调试、分析或重构Java程序非常...

    standalone-app, 在一个Java逆向工程工具中,.zip

    standalone-app, 在一个Java逆向工程工具中, 独立应用程序Helios是一个 all-in-one Java逆向工程工具。 它与最新的基于xml的反汇编器集成。如果你想下载最新版本,请查看服务器 。有几个keybinds可以使用。 要打开...

    java代码逆向生成工具

    Java代码逆向生成工具是一种非常实用的开发辅助软件,它能够极大地提高开发效率,尤其是在进行大量重复性工作时。这个工具的主要功能是根据已有的数据库结构自动产生对应的XML配置文件、Mapper接口、Service接口及...

    Java逆向工程

    4. **混淆与反混淆**:Java应用常会使用混淆技术来保护代码,逆向工程师需要了解混淆算法并能解密混淆后的代码。 5. **框架与库的识别**:在逆向工程中,识别出使用的第三方库和框架至关重要,这有助于理解程序的...

    java逆向工程代码

    4. **代码生成**:基于获取的元数据,逆向工程工具会自动生成Java类、DAO(Data Access Object)接口、实体类、Service接口及实现类等。这些代码通常包含了基本的CRUD操作,以及相关的注解或配置文件,以支持ORM框架...

    Java逆向工程-附简单操作指南.zip

    文档"新手请看-老手无视.docx"很可能是针对Java逆向工程初学者的一份教程,它可能涵盖了基本的术语解释、常用的逆向工程工具以及如何使用这些工具来分析和理解Java代码。对于新手来说,这将是一个宝贵的资源,能够...

    mybatis逆向工程工具

    MyBatis逆向工程工具是Java开发者在构建SSM(Spring、SpringMVC、MyBatis)项目时常用的一种高效工具。它能够帮助开发者自动生成DAO(Data Access Object)、Mapper接口以及实体类(Entity),极大地提高了开发效率...

    java逆向工具jad.exe

    软件适合用来反编译java(后缀为.class)文件,ctf的兄弟们可能会用到,资源来自网络谨慎使用哦 使用方法写在了压缩包里,只是小白望大佬莫嘲笑。

    MyBatis逆向生成工具

    MyBatis逆向生成工具是一种高效实用的开发辅助工具,主要用于简化Java开发过程中与数据库交互的代码编写工作。它能够根据数据库中的表结构自动生成对应的Java实体类、Mapper接口及XML配置文件,大大提升了开发效率,...

    java逆向工程生成工具

    java逆向工程 ..

    JAVA逆向工程源码

    JAVA逆向工程源码JAVA逆向工程源码JAVA逆向工程源码JAVA逆向工程源码JAVA逆向工程源码JAVA逆向工程源码JAVA逆向工程源码JAVA逆向工程源码JAVA逆向工程源码JAVA逆向工程源码JAVA逆向工程源码JAVA逆向工程源码JAVA逆向...

    逆向移植安卓系统.docx

    ### 逆向移植安卓系统详解 #### 一、概述 逆向移植安卓系统是指将一个设备上的安卓系统移植到另一个设备上,使后者能够运行前者的操作系统版本。本文档主要介绍如何实现安卓系统的跨平台移植,包括所需工具、操作...

    java逆向生成实现层工具

    Java逆向生成serviceImpl:包括日志声明,保存,更新,批量保存,批量更新方法的实现等。配套的还有实体类,dao层,dao.xml,service层的生成文件,在其他下载资源中。

    逆向工程项目工具

    总的来说,逆向工程项目工具通过逆向生成、数据库连接、Java代码自动生成等功能,为开发者提供了强大的支持,使他们能在没有源代码的情况下理解和修改现有软件系统。这些工具不仅提高了开发效率,还降低了理解和维护...

    java逆向生成实体类工具

    Java逆向生成实体类:包括所需要的import,tag,字段注释,序列化等。配套的还有dao层,dao.xml,service层,serviceImpl的生成文件,在其他下载资源中。

    java逆向工程测试工具

    在这里,我们将深入探讨Java逆向工程工具JADX以及它在Win10 64位系统中的使用。 JADX是一款开源的Java反编译器,由Dmitry Sklyarov开发,专门设计用于将Android的.dex文件转换为可读的Java源代码。这个工具以其高...

    逆向生成工具,有数据库表生成java bean实体类

    总的来说,"逆向生成工具,有数据库表生成java bean实体类"是一种提高开发效率、降低维护成本的利器。通过合理的XML配置和简单的执行命令,我们可以快速地从数据库中获取到对应的Java Bean实体类,使开发过程更加...

    java逆向自动生成service层

    Java逆向生成service:包括保存,更新,批量保存,批量更新的方法声明等。配套的还有entity,dao层,dao.xml,serviceImpl的生成文件,在其他下载资源中。

Global site tag (gtag.js) - Google Analytics