使用dx命令在cmd环境下执行的正确方法,我用的版本android4.4.2,jdk1.8
一、首先介绍几条命令:
将Hello.java文件编译成Hello.class文件
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>javac -source 1.6 -target 1.6 Hello.java
将Hello.class文件反编译java汇编代码
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>javap -c -classpath . Hello
将Hello.class文件编译成Hello.dex文件
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>dx --dex --output Hello.dex Hello.class
将.dex文件反编译成dalvik汇编代码
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>dexdump.exe -d Hello.dex
二、比如下面的java代码,我要看反编译后的android汇编代码,应如下操作:
public class Hello {public int foo(int a, int b) {return (a+b)*(a-b);}public static void main(String[] argc) {Hello h = new Hello();System.out.println(h.foo(5, 3));} }
1.把dx路径的放进环境变量path中,例如我的路径是 F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2
2.将java代码编译成java的字节码文件(class文件)
因为的jdk版本太高,所以要使用命令如下:
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>javac -source 1.6 -target 1.6 Hello.java
2.将Hello.class文件放到dx的路径下
3.通过dx工具将Hello.class文件(java字节码)转换成android的Hello.dex文件(dalvik字节码)
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>dx --dex --output Hello.dex Hello.class
4.通过dexdump.exe将Hello.dex文件反编译成dalvik汇编代码
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>dexdump.exe -d Hello.dex
最终生成的dalvik汇编代码如下:
Processing 'Hello.dex'... Opened 'Hello.dex', DEX version '035' Class #0 -Class descriptor : 'LHello;'Access flags : 0x0001 (PUBLIC)Superclass : 'Ljava/lang/Object;'Interfaces -Static fields -Instance fields -Direct methods -#0 : (in LHello;)name : '<init>'type : '()V'access : 0x10001 (PUBLIC CONSTRUCTOR)code -registers : 1ins : 1outs : 1insns size : 4 16-bit code units 00014c: |[00014c] Hello.<init>:()V 00015c: 7010 0400 0000 |0000: invoke-direct {v0}, Ljava/ lang/Object;.<init>:()V // method@0004 000162: 0e00 |0003: return-voidcatches : (none)positions :0x0000 line=1locals :0x0000 - 0x0004 reg=0 this LHello;#1 : (in LHello;)name : 'main'type : '([Ljava/lang/String;)V'access : 0x0009 (PUBLIC STATIC)code -registers : 5ins : 1outs : 3insns size : 17 16-bit code units 000164: |[000164] Hello.main:([Ljava/lang /String;)V 000174: 2200 0100 |0000: new-instance v0, LHello; / / type@0001 000178: 7010 0000 0000 |0002: invoke-direct {v0}, LHello ;.<init>:()V // method@0000 00017e: 6201 0000 |0005: sget-object v1, Ljava/lang /System;.out:Ljava/io/PrintStream; // field@0000 000182: 1252 |0007: const/4 v2, #int 5 // #5 000184: 1233 |0008: const/4 v3, #int 3 // #3 000186: 6e30 0100 2003 |0009: invoke-virtual {v0, v2, v3 }, LHello;.foo:(II)I // method@0001 00018c: 0a00 |000c: move-result v0 00018e: 6e20 0300 0100 |000d: invoke-virtual {v1, v0}, L java/io/PrintStream;.println:(I)V // method@0003 000194: 0e00 |0010: return-voidcatches : (none)positions :0x0000 line=60x0005 line=70x0010 line=8locals :Virtual methods -#0 : (in LHello;)name : 'foo'type : '(II)I'access : 0x0001 (PUBLIC)code -registers : 5ins : 3outs : 0insns size : 6 16-bit code units 000198: |[000198] Hello.foo:(II)I 0001a8: 9000 0304 |0000: add-int v0, v3, v4 0001ac: 9101 0304 |0002: sub-int v1, v3, v4 0001b0: b210 |0004: mul-int/2addr v0, v1 0001b2: 0f00 |0005: return v0catches : (none)positions :0x0000 line=3locals :0x0000 - 0x0006 reg=2 this LHello;source_file_idx : 1 (Hello.java)
转载于:https://www.cnblogs.com/colin1983/p/3787802.html
使用dx命令在cmd环境下执行的正确方法,我用的版本android4.4.2,jdk1.8相关推荐
- conda添加清华镜像源在cmd环境下执行下列命令
为conda添加清华镜像源在cmd环境下执行下列命令 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda ...
- xampp 执行php命令,处理XAMPP环境下执行ZF命令时的报错
[错误提示]: An Error Has Occurred A project profile was not found. [错误原因]:xampp里的phpunit版本不匹配,重新安装即可 [解决 ...
- 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试
文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...
- linux 环境启动redis,linux环境下启动redis的方法
linux环境下启动redis的方法 发布时间:2020-08-24 16:15:54 来源:亿速云 阅读:88 作者:小新 这篇文章主要介绍了linux环境下启动redis的方法,具有一定借鉴价值, ...
- U盘文件夹变exe的win10环境下纯手工解决方法(无需任何软件)
U盘文件夹变exe的win10环境下纯手工解决方法(无需任何软件) 把U盘插入装有win10系统的电脑 打开U盘目录(这里假设U盘目录是G:) 选中变成exe的文件,删除(放心,这里的exe是一个几k ...
- win10+python3.6+tensorflow-cpu+keras+Pycharm环境下的tensorflow配置方法
在pytorch成功配置的基础上,也尝试着把tensorflow和keras安装了一下. Win 10 Anaconda3-5.2.0-Windows-x86_64.exe python3.6 ten ...
- python3.6+pytorch-cpu+Pycharm环境下的PyTorch配置方法
在踩了很多坑,好不容易安装成功后,想着整理总结一下,给后来人一个参考. 安装Anaconda 清华大学开源软件镜像站清华Anaconda安装包下载地址 链接进去选择自己需要的版本就可以下载了哈.这里我 ...
- ros构建机器人运动学模型_ROS环境下机器人仿真模型构建方法研究.doc
ROS环境下机器人仿真模型构建方法研究 ROS环境下机器人仿真模型构建方法研究 摘 要: 在众多的机器人仿真平台中,ROS可以封装机器人硬件.提出在ROS环境下构建机器人的仿真模型方法.设计了机器人仿 ...
- Windows环境下执行hadoop命令出现系统找不到指定路径Error
问题详情 比如在win下的cmd下执行如下命令,会出现 首先打了下java -version,对的呀. C:\Users\lenovo>java -version java version &q ...
最新文章
- 5.Spring Security 短信验证码登录
- linux命令行之find详解
- python3教程-Python3教程
- 查看oracle所有实例_Oracle目录结构与系统用户-数据库(3)
- 2020年编程现状:Python将成为第一大编程语言,中国开源涨势最猛
- python和anaconda区别_Pycharm、Anaconda到底是什么?有什么区别?
- python3生成文件对象(五分钟读懂)
- JavaScript学习之旅-9(原创)
- Windows 编程[6] - 学习窗体生成的过程六: 最终的代码!
- 【SLAM学习笔记】8-ORB_SLAM3关键源码分析⑥ Optimizer(三)全局优化
- 基于Thinkphp开发的网页点餐收银系统SAAS模式
- 网络安全工程师面试题合集(不全,暂不整理了)
- 安捷伦温度测试仪 软件,安捷伦34970A数据采集器温度测试仪是德科技34970A+34901A模块...
- git如何选择性合并_git - 如何挑选一系列提交并合并到另一个分支?
- 线程池java submit,详解线程池execute和submit用法
- python中模块和包是什么_python的模块和包的详细说明
- php mobi_PHP核心技术与最佳实践 mobi epub
- 谷歌手机正式发布 售价179美元(图)
- 7-2 程序改错题4 (5 分)
- Linux串口输出启动信息,linux开发板启动过程串口打印信息
热门文章
- 在EditPlus里直接运行PHP
- priority_queue 用法总结
- 【掩耳盗铃】[转载]北京铁路局:“北京站37号窗口售票员内部大量出票”是为分区售票...
- 蓝桥杯 ALGO-60 算法训练 矩阵乘方
- PAT 1066. 图像过滤(15)-乙级
- ps文字换行_零基础一周内熟悉使用PS基础工具【Photoshop教程二】
- python 3d重建_三维人脸重建(一)——Python读取obj文件
- java 获取mongodb的连接数
- 《Play for Java》学习笔记(七)数据类型解析——Body parser
- 大家有用 hackerrank 刷过题吗,这家公司出了一个题来让大家测测自己有多牛