使用javap反编译class文件
一个普通的Java类:
- package org.ccnt.concurrence;
- public class VolatileTest {
- public static volatile int race = 0;
- public static void increate() {
- race ++;
- }
- private static final int THREAD_COUNT = 20;
- public static void main(String[] args) {
- Thread[] threads = new Thread[THREAD_COUNT];
- for (int i=0; i<THREAD_COUNT; i++) {
- threads[i] = new Thread(new Runnable() {
- @Override
- public void run() {
- for (int i=0; i<10000; i++){
- increate();
- }
- }
- });
- threads[i].start();
- }
- while (Thread.activeCount() > 1) {
- Thread.yield();
- }
- System.out.println(race);
- }
- }
现在我们使用JDK带的反编译工具javap来反编译VilatileTest.class,先执行下面的命令:
- javap org.ccnt.concurrence.VolatileTest > VolatileTest.jad
VolatieTest.jad
- Compiled from "VolatileTest.java"
- public class org.ccnt.concurrence.VolatileTest {
- public static volatile int race;
- static {};
- public org.ccnt.concurrence.VolatileTest();
- public static void increate();
- public static void main(java.lang.String[]);
- }
查看字节码:
- javap -c org.ccnt.concurrence.VolatileTest > VolatileTest.txt
VolatileTest.txt
- Compiled from "VolatileTest.java"
- public class org.ccnt.concurrence.VolatileTest {
- public static volatile int race;
- static {};
- Code:
- 0: iconst_0
- 1: putstatic #13 // Field race:I
- 4: return
- public org.ccnt.concurrence.VolatileTest();
- Code:
- 0: aload_0
- 1: invokespecial #18 // Method java/lang/Object."<init>":()V
- 4: return
- public static void increate();
- Code:
- 0: getstatic #13 // Field race:I
- 3: iconst_1
- 4: iadd
- 5: putstatic #13 // Field race:I
- 8: return
- public static void main(java.lang.String[]);
- Code:
- 0: bipush 20
- 2: anewarray #25 // class java/lang/Thread
- 5: astore_1
- 6: iconst_0
- 7: istore_2
- 8: goto 37
- 11: aload_1
- 12: iload_2
- 13: new #25 // class java/lang/Thread
- 16: dup
- 17: new #27 // class org/ccnt/concurrence/VolatileTest$1
- 20: dup
- 21: invokespecial #29 // Method org/ccnt/concurrence/VolatileTest$1."<init>":()V
- 24: invokespecial #30 // Method java/lang/Thread."<init>":(Ljava/lang/Runnable;)V
- 27: aastore
- 28: aload_1
- 29: iload_2
- 30: aaload
- 31: invokevirtual #33 // Method java/lang/Thread.start:()V
- 34: iinc 2, 1
- 37: iload_2
- 38: bipush 20
- 40: if_icmplt 11
- 43: goto 49
- 46: invokestatic #36 // Method java/lang/Thread.yield:()V
- 49: invokestatic #39 // Method java/lang/Thread.activeCount:()I
- 52: iconst_1
- 53: if_icmpgt 46
- 56: getstatic #43 // Field java/lang/System.out:Ljava/io/PrintStream;
- 59: getstatic #13 // Field race:I
- 62: invokevirtual #49 // Method java/io/PrintStream.println:(I)V
- 65: return
- }
使用javap反编译class文件的更多相关文章
- 反编译APK文件
有时源代码丢失了,这时如果有apk文件的话,是可以对apk文件反编译得到源文件的,本文介绍一下简单的反编译apk文件的过程. 1.工具 反编译apk需要的工具有两个:apk2java和apktool, ...
- MyEclipse反编译Class文件
对于需要查看Java Class文件源码的筒子们来说,必须在项目中导入Java源码才能查看Class文件的具体实现,这不仅十分的麻烦,因为有时我们并不可以获得Class文件对应的Java源码.今天就给 ...
- Xamarin android如何反编译apk文件
Xamarin android 如何反编译 apk文件 这里推荐一款XamarinAndroid开发的小游戏,撸棍英雄,游戏很简单,的确的是有点大.等一下我们来翻翻译这个Xamarin Android ...
- 反编译class文件并重新编译的方法
在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler ...
- Eclipse Oxygen(4.7.0)安装插件Eclipse Class Decompiler反编译JAR文件
引用自官方内容 Eclipse Class Decompiler是一款Eclipse插件,整合了多种反编译器,和Eclipse Class Viewer无缝集成,能够很方便的使用插件查看类库源码,进行 ...
- Android开发学习之反编译APK文件
反编译的目的在于学习一些优秀的Android应用程序代码. 在进行反编译之前,需要准备好下面的软件工具(这些文件都放在同一文件下): 这些工具的下载地址:http://down.51cto.com/d ...
- 简单的反编译class文件并重新编译的方法
在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler ...
- Android apktool反编译资源文件为空解决办法(测试天猫、淘宝等apk成功)
1 Exception in thread main brut.androlib.androlibexception multiple resources 解决办法:下载最新的apktool,在goo ...
- Eclipse - 安装了jd-eclipse插件后依然无法反编译类文件
问题 Eclipse在安装了jd-eclipse插件后依然无法反编译类文件,这个问题是因为没有修改默认的类文件查看器. 解决方法 修改默认的类文件查看器为jd-eclipse Window -> ...
随机推荐
- #define与运算精度问题探究
#include <stdio.h> #define SQR(X) X*X int main(int argc, char* argv[]) { ; ; ; printf("SQ ...
- 第十章:鸟哥的Linux私房菜
第十章.vim程式编辑器 1. vi与vim 1.1 为何要学vim2. vi的使用 2.1 简易执行范例 2.2 按键说明 2.3 一个案例的练习 2.4 vim的暂存档.救援回复与开启时的警告讯息 ...
- 1763 An Essay towards solving a Problem in the Doctrine of Chances
https://en.wikipedia.org/wiki/An_Essay_towards_solving_a_Problem_in_the_Doctrine_of_Chances
- php数据缓存
用php进行微信开发时,碰到access_token长久保存的问题,以前都是用框架里的Cache直接set.get一下就完了.现在没框架可用了,只好自己动手写一个cache暂时用. 这个Cache类用 ...
- 设计模式:命令模式(Command)
定 义:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排列或者记录请求日志,以及支持可撤销的操作. 结构图: Command类: abstract class Comma ...
- ios证书
内容提要: 安装app时提示 “无法下载应用,此时无法安装“XXX””.我遇到过多次是由于ios的app出现证书问题.本篇文章讲解用ios证书制作过程,以及每个步骤的解释. 正文: Xcode签名至少 ...
- Java学习-032-JavaWeb_001 -- Tomcat环境部署及基本配置
首先到 Tomcat 官网,下载对应的版本,我本机的系统是 WIN7 64BIT 的,因而我选择的是64bit 的zip包,如下图所示:
- Selenium2学习-009-WebUI自动化实战实例-007-Selenium 8种元素定位实战实例源代码(百度首页搜索录入框及登录链接)
此 文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,通过 ID.name.xpath.cssSelector.linkText.className.partialLinkTe ...
- [转]获得 LayoutInflater 实例的三种方式
转自:http://www.cnblogs.com/androidez/archive/2013/07/01/3164729.html 获得 LayoutInflater 实例的三种方式 在实际开 ...
- http://blog.csdn.net/maosidiaoxian/article/details/40109337
http://blog.csdn.net/maosidiaoxian/article/details/40109337