smali汇编学习

# HelloWorld.smali
.class public LHelloWorld; # 定义类名
.super Ljava/lang/Object; # 父类
.method public static main([Ljava/lang/String;)V #声明静态main()方法
.locals 3 #程序使用v0、v1、v2 以及一个参数
#.prologue #代码起始指令
#数据定义指令
const/16 v0, 0x8
const/4 v1, 0x5
const/4 v2, 0x3
#数据操作指令
move v1, v2
#数组操作指令
new-array v0,v0,[I
array-length v1,v0 #获取数组长度
#实例操作指令
new-instance v1,Ljava/lang/StringBuilder;
#方法调用
invoke-direct {v1},Ljava/lang/StringBuilder;-><init>()V
#跳转指令
if-nez v0,:cond_0
goto :goto_0
:cond_0
#数据转换
int-to-float v2,v2
#数据运算指令
add-float v2,v2,v2
#比较指令
cmpl-float v0,v2,v2
#字段操作指令
sget-object v0,Ljava/lang/System;->out:Ljava/io/PrintStream;
const-string v1 , "Hi,MobSec" #构造字符串
#方法调用
invoke-virtual {v0,v1},Ljava/io/PrintStream;->println(Ljava/lang/String;)V
#返回指令
:goto_0
return-void
.end method

使用smali.jar将HelloWorld.smali编译为DEX文件
命令如下

java -jar smali.jar assemble -o HelloWorld.dex HelloWorld.smali

接着,需要将这个smali压缩为zip格式的压缩包HelloWorld.zip
然后将这个压缩包拷贝到手机中,或者是模拟器中
adb命令如下

adb push HelloWorld.zip /data/local
[100%] /data/local/HelloWorld.zip
E:\mobileSec\tools\build>adb shell dalvikvm -cp /data/local/HelloWorld.zip HelloWorld
Hi,MobSec