精华内容
下载资源
问答
  • java反汇编指令.doc

    2020-06-04 15:45:09
    java反汇编指令
  • JAVA反汇编

    2013-09-16 07:54:47
    有一个class文件,可以生成JAVA文件
  • java反汇编 | 学步园

    2021-03-10 07:15:38
    本文通过介绍用Javap反汇编帮你理解Java特性,使用 Javap 深入查看类文件。Java开发人员熟悉在一个循环中使用StringBuffer 来代替串联 String对象能获得最佳性能。然而,多数开发人员从来没有比较两种方法产生的字节...

    本文通过介绍用Javap反汇编帮你理解Java特性,使用 Javap 深入查看类文件。

    Java

    开发人员熟悉在一个循环中使用StringBuffer 来代替串联 String

    对象能获得最佳性能。然而,多数开发人员从来没有比较两种方法产生的字节代码的区别。在 Java 开发工具包(JDK)中有一个叫做 javap

    的工具可以告诉你为什么这样做可以获得最佳性能。

    Javap 将一个类和它的方法的一些转储信息输出到标准输出。该工具不把代码反编译为 java 源代码,但是它会把字节代码反汇编成为由 Java 虚拟机规范定义的字节代码指令。

    在你需要查看编译器为你或者给你做了什么的时候,或者你想要看一处代码的改动对编译后的类文件有什么影响的时候,javap 相当有用。

    现在以我们前面提到的 StringBuffer 和 String 作为一个例子。下面是一个专门为例子设计的类,它有两个方法,都返回一个由0到 n

    的数字组成的 String,其中 n 由调用者提供。两个方法唯一的区别在于一个使用 String 构建结果,另外一个使用

    StringBuffer 构建结果。

    public class JavapTip {

    public static void main(String []args) {

    }

    private static String withStrings(int count) {

    String s = "";

    for (int i = 0; i < count; i++) {

    s += i;

    }

    return s;

    }

    private static String withStringBuffer(int count) {

    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < count; i++) {

    sb.append(i);

    }

    return sb.toString();

    }

    }

    现在让我们看看对这个类使用–c 选项运行 javap 的输出。-c 选项告诉 javap 反汇编在类中遇到的字节代码。

    运行方式如下:

    >javap -c JavapTip

    此命令的输出为:

    Method java.lang.String withStrings(int)

    0 ldc #2

    2 astore_1

    3 iconst_0

    4 istore_2

    5 goto 30

    8 new #3

    11 dup

    12 invokespecial #4

    15 aload_1

    16 invokevirtual #5

    19 iload_2

    20 invokevirtual #6

    23 invokevirtual #7

    26 astore_1

    27 iinc 2 1

    30 iload_2

    31 iload_0

    32 if_icmplt 8

    35 aload_1

    36 areturn

    Method java.lang.String withStringBuffer(int)

    0 new #3

    3 dup

    4 invokespecial #4

    7 astore_1

    8 iconst_0

    9 istore_2

    10 goto 22

    13 aload_1

    14 iload_2

    15 invokevirtual #6

    18 pop

    19 iinc 2 1

    22 iload_2

    23 iload_0

    24 if_icmplt 13

    27 aload_1

    28 invokevirtual #7

    31 areturn

    如果你以前没有看过 Java 汇编器,那么这个输出对你来说就会比较难懂,但是你应该可以看到 withString

    方法在每次循环的时候都新创建了一个 StringBuffer 实例。然后它将已有的 String 的当前值追加到 StringBuffer

    上,然后追加循环的当前值。最后,它对 buffer 调用 toString 并将结果赋给现有的 String 引用。

    withStringBuffer 方法与这个方法正好相反,在每次循环的时候 withStringBuffer 只调用现有 StringBuffer 的 append 方法,没有创建新的对象,也没有新的 String 引用。

    在这种情况下,我们已经知道了使用 StringBuffer 代替 String 是一种好的做法,但是如果我们不知道呢?那么 javap 可以帮助我们找到答案。在这里你可以看到更详细的关于String,StringBuffer 的解释

    你并不会经常需要一个 Java 反汇编器,但是当你需要的时候,知道你自己的机器已经有一个并且用法相当简单的反汇编器当然是一件好事。如果你感兴趣,看书看看 javap 的其它选项——或许你会发现在你的环境中需要的特性。

    展开全文
  • Java反汇编入门

    千次阅读 2019-02-26 23:44:20
    Java反汇编入门教程 今天刚刚接触到java的反汇编,所以想写一篇文章给大家分享一下。 预备知识 学习反汇编首先应该首先了解JVM的内存模型,这里简单介绍一下。 JVM的内存模型,如下图 其中方法区和堆是线程...

    Java反汇编入门教程

    今天刚刚接触到java的反汇编,所以想写一篇文章给大家分享一下。

    • 预备知识

    学习反汇编首先应该首先了解JVM的内存模型,这里简单介绍一下。
    JVM的内存模型,如下图
    在这里插入图片描述其中方法区和堆是线程共享的,java栈、程序计数器、本地方法栈是线程私有的。本博客主要是反汇编入门,我会举一个栗子,需要对java栈理解才能明白接下来的栗子。

    • 程序执行过程

      程序开始执行的时候,JVM会调用main函数,首先main函数会压入栈中,main函数调用其他函数,其他函数依次入栈,然后函数一层层返回直到main函数结束,程序结束。

    • Java栈
      说java帧先说栈帧的概念
      栈帧(Stack Frame) 是用于虚拟机执行时方法调用和方法执行时的数据结构,它是虚拟栈数据区的组成元素。每一个方法从调用到方法返回都对应着一个栈帧入栈出栈的过程。

    每一个栈帧在编译程序代码的时候所需要多大的局部变量表,多深的操作数栈都已经决定了,并且写入到方发表的 Code 属性之中,一次一个栈帧需要多少内存,不会受到程序运行期变量数据的影响,仅仅取决于具体的虚拟机实现。

    一个线程中方法调用可能很长,很多方法都处于执行状态。对于执行引擎来说,只有处于栈顶的栈帧才是有效的,称为当前栈帧(Current Stack Frame),与之相关联的方法称为当前方法(Current Method)

    在概念模型上,典型的栈帧主要由 局部变量表(Local Stack Frame)、操作数栈(Operand Stack)、动态链接(Dynamic Linking)、返回地址(Return Address)组成,如下图所示
    在这里插入图片描述

    • 栗子
      上面把需要掌握的基本要点已经介绍完了。下面我们直接来一个栗子,在详细的讲解。直接上代码,如下
    public class Main {
    public static void main(String[] args) {
    		test();
    	}
    	public static void test(){
    		int i = 2;
    		int j = 3;
    		int k = i + j;
    		System.out.println(k);
    	}
    }
    
    

    代码很简单,仅仅是一个main函数调用一个test方法,虽然是一个很简单的程序,内存中是如何执行,就得反汇编。得到反汇编的步骤。

    1. 打开cmd,进入到我们源程序的目录,输入命令:java Main.java
      得到Main.class。

    2. 在当前目录中输入命令: javap -c 会看到
      在这里插入图片描述这就是生成的汇编代码
      main函数
      0: invokestatic #16 // Method test:()V main函数调用test函数

    test函数
    code:
    0.iconst_2 //将整数2保存到操作数栈中
    1.istore_0 //将操作数栈顶的数保存到局部变量表的变量0中(这里注意操作数栈会将栈顶的数弹栈)
    2.iconst_3 //将整数3保存到操作数栈中
    3.istore_1 //将操作数栈顶的数保存到局部变量表的变量1中
    4.iload_0 //将局部变量表变量0保存到栈顶
    5.iload_1 //将局部变量表变量0保存到栈顶
    6.iadd //将栈顶两int类型数相加,结果入栈
    7.istore_2 //将操作数栈顶的数保存到局部变量表的变量2中
    …后面的代码就是输出,返回main函数

    这样看汇编代码执行的逻辑和我们源码逻辑是一样的。希望能够帮助大家!汇编小白,希望勿喷

    展开全文
  • java反汇编工具咖啡杯

    2021-07-26 09:33:10
    java反汇编工具咖啡杯
  • Java反汇编工具集.zip

    2020-05-17 18:57:04
    Java反汇编工具集,包括apktool1.4.1,dex2jar-2.0和jd-gui-windows-1.6.3。可用于反汇编Java项目或Android项目。Android项目可根据apk生成对应反汇编源码(和原先源码不一定完全相同),可还原项目依赖的各种资源...
  • 简易java反汇编工具

    2013-01-16 16:13:04
    非常简单小巧而功能强大的java反汇编工具
  • 1、添加工具: File --> Tools --> External Tools --> “+” 应用–>确定。 在java文件上右键查看即可: 内容为:

    1、添加工具:
    File --> Tools --> External Tools --> “+”
    在这里插入图片描述
    应用–>确定。

    在java文件上右键查看即可:
    在这里插入图片描述
    内容为:
    在这里插入图片描述

    展开全文
  • java 反汇编工具源码

    2014-05-09 16:01:11
    java 反汇编工具源码;可以进行适当的修改,来满足自己的需要。
  • java反汇编指令

    2021-04-01 13:07:37
    1.Hello.java public class Hello{ public static void main(String[] args) { System.out.println("Hello World"); } } 2.Hello.class cafe babe 0000 0034 001d 0a00 0600 0f09 0010 0011 0800 120a 0013 ...

    指令

    javap -c

    实例

    1.Hello.java

    public class Hello{
    	public static void main(String[] args) {
    		System.out.println("Hello World");
    	}
    }
    

    2.Hello.class

    cafe babe 0000 0034 001d 0a00 0600 0f09
    0010 0011 0800 120a 0013 0014 0700 1507
    0016 0100 063c 696e 6974 3e01 0003 2829
    5601 0004 436f 6465 0100 0f4c 696e 654e
    756d 6265 7254 6162 6c65 0100 046d 6169
    6e01 0016 285b 4c6a 6176 612f 6c61 6e67
    2f53 7472 696e 673b 2956 0100 0a53 6f75
    7263 6546 696c 6501 000a 4865 6c6c 6f2e
    6a61 7661 0c00 0700 0807 0017 0c00 1800
    1901 000b 4865 6c6c 6f20 576f 726c 6407
    001a 0c00 1b00 1c01 0005 4865 6c6c 6f01
    0010 6a61 7661 2f6c 616e 672f 4f62 6a65
    6374 0100 106a 6176 612f 6c61 6e67 2f53
    7973 7465 6d01 0003 6f75 7401 0015 4c6a
    6176 612f 696f 2f50 7269 6e74 5374 7265
    616d 3b01 0013 6a61 7661 2f69 6f2f 5072
    696e 7453 7472 6561 6d01 0007 7072 696e
    746c 6e01 0015 284c 6a61 7661 2f6c 616e
    672f 5374 7269 6e67 3b29 5600 2100 0500
    0600 0000 0000 0200 0100 0700 0800 0100
    0900 0000 1d00 0100 0100 0000 052a b700
    01b1 0000 0001 000a 0000 0006 0001 0000
    0001 0009 000b 000c 0001 0009 0000 0025
    0002 0001 0000 0009 b200 0212 03b6 0004
    b100 0000 0100 0a00 0000 0a00 0200 0000
    0300 0800 0400 0100 0d00 0000 0200 0e
    

    3.运行javap -c Hello.class > Hello.txt,得到可读性好的反编译文件

    Compiled from "Hello.java"
    public class Hello {
      public Hello();
        Code:
           0: aload_0
           1: invokespecial #1                  // Method java/lang/Object."<init>":()V
           4: return
    
      public static void main(java.lang.String[]);
        Code:
           0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
           3: ldc           #3                  // String Hello World
           5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
           8: return
    }
    
    

    -END-

    如果你喜欢我的分享,欢迎关注微信公众号 java学长分享技术干货!

    悄悄告诉你免费赠送重磅互联网架构师教程,提升职场技术水平!

    展开全文
  • 本文主要学习了Java汇编指令,学习JVM是如何对代码进行编译的。
  • } } 使用javac命令编译成class文件后用javap -c命令进行反汇编 我们主要解读下add这个方法中的汇编码: public int add(); Code: 0: iconst_1 //将int类型常量1压入操作数栈 1: istore_1 //将int类型值存入局部...
  • 【 声明:版权所有,欢迎转载,请勿用于商业用途。...这个时候,很多同学会说,如果是java的程序,有没有办法看到对应的反汇编代码。其实是有的。答案就是javap程序。 1、编写简单的java代码 impo...
  • Java反汇编指令详细对照解读
  • javap反汇编器javap命令反汇编一个java字节代码文件, 返回有关可变部分和成员函数的信息,其命令行如下:C:/>javap options classname additionalClassesjavap的标准输出是公有变量和类的成员函数。javap反汇编...
  • java反汇编

    千次阅读 2010-12-29 22:17:00
    本文通过介绍用Javap反汇编帮你理解Java特性,使用 Javap 深入查看类文件。  Java 开发人员熟悉在一个循环中使用StringBuffer 来代替串联 String 对象能获得最佳性能。然而,多数开发人员从来没有...
  • 大多数情况下,通过诸如javap等反编译工具来查看源码的字节码已经能够满足我们的日常需求,但是不排除在有些特定场景下,我们需要通过反汇编来查看相应的汇编指令。本文我们就来介绍两个很好用的工具——HSDIS、...
  • java反汇编软件可以反汇编class文件,超好用你懂得
  • jclasslib JAVA反汇编

    2011-06-10 15:57:32
    jclasslib JAVA反汇编 jclasslib JAVA反汇编
  • java 反汇编工具 无错版本
  • hsdis-i386.dll用于java二进制文件反汇编,一般结合jitwatch用于查看底层代码的指令重排序,分析多线程中的可见性问题。
  • java反汇编器(好玩)

    2008-05-28 13:28:54
    java反汇编器(好玩)
  • 一、javac命令:编译 上面支持中文! ...总结:javac命令可以把java源文件(.java)编译成字节码文件(.class) ...示例2:既显示反汇编后的Java代码,也显示字节码指令(Java语言的汇编指令) C:\Users\FDDLC\...
  • IDA pro 7.0版本from:freebuf用到的工具有IDA pro 7.0 ,被反汇编的是百度云(BaiduNetdisk_5.6.1.2.exe)。首先,IDA pro的长相如下:共有(File , Edit , Jump , Search , View , Debugger , Options , Windows , ...
  • 本帖最后由 Heart 于 2020-10-31 13:54 编辑当时学JAVA的时候有用到,后面仔细找一找好像很多地方的链接都失效了. 可以编译jar包挺好用的,可惜是06年更新的2.2版本一直没更新了,编译后会在源目录下面创建一个带"~...
  • java中有些代码我们无法通过源代码获取执行的逻辑,比如下面定义两个整数,我们发现Integer类中并没有这样定义的方法,但是java却可以这样定义,难免猜想中间做了什么操作但是我们又不知道 public class Main { ...
  • 不想废话,直接上代码TestJavap.javapublic class TestJavap {public static void main(String[] args){int i = 0;i = i++;System.out.println(i);}}编译> javac TestJavap.java得到 TestJavap.classpublic class...
  • org.openjdk.asmtools.jdis.Main Java字节码的反汇编器工具 Java字节码的反汇编器工具
  • idea的java反编译插件

    千次阅读 2021-03-19 08:52:27
    一个好的IDE当然应该集成编译工具,IDEA当然也有这样的功能。而且我认为它的设置比eclipse要简单些。但是需要注意的是IDEA提供了多个版本的编译插件,需要根据自己的IDEA版本下载对应的插件版本 idea 11.1.4插件...
  • java反编译jar包

    万次阅读 2019-02-18 21:57:02
    工具1:jad ... 比如我现在有个jar包,struts2-core-2.3.16.3.jar 当前所在目录为D:/mylib,在当前目录启动cmd,执行 ...jad -o -r -ff -dtest -sjava struts2-core-...-o表示编译后遇到同名文件直接覆盖(默认会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,023
精华内容 11,209
关键字:

java反汇编

java 订阅
友情链接: degh.rar