由.java文件到.class文件转化成.dex文件再转化.smali文件的过程

来源:互联网 发布:js构造函数的使用实例 编辑:程序博客网 时间:2024/05/16 15:17

Hello.java程序

public class Hello{public int foo(int a,int b){return (a+b)*(a-b);}public static void main(String[] args){Hello hello=new Hello();System.out.println(hello.foo(5,3));}}
使用javac命令将Hello.java文件转化为Hello.class文件


使用javap命令查看Hello.class的java字节码


使用dx工具将.class文件转成.dex文件(位于D:\sdk\build-tools\26.0.2目录,自己sdk目录对应的,由于build-tools下有很多目录,自己选一个目录)

执行命令报错


将该.class文件放置到D:\sdk\build-tools\26.0.2目录执行该命令。


使用dexdump.exe -d hello.dex命令查看生成的Dalvik字节码




至此,将.java文件成功转化为.class文件,并查看了.class的字节码,将.class文件成功转为为.dex文件,并查看了.dex的字节码。

将baksmali.jar和smali.jar放到统一目录(按住shift键+鼠标右键再这目录下打开命令窗口),使用baksmali.jar反编译Hello.dex的文件


使用工具打开Hello.smali文件

关键的函数方法体

# virtual methods.method public foo(II)I    .registers 5    .parameter    .parameter    .prologue    .line 4    add-int v0, p1, p2    sub-int v1, p1, p2    mul-int/2addr v0, v1    return v0.end method

使用ddx.jar反编译Hello.dex的文件


关键的函数方法体

.method public foo(II)I.limit registers 5; this: v2 (LHello;); parameter[0] : v3 (I); parameter[1] : v4 (I).line 4add-intv0,v3,v4sub-intv1,v3,v4mul-int/2addrv0,v1returnv0.end method





原创粉丝点击