您的位置:首页 > 移动开发 > Android开发

android smali入门之HelloWorld

2016-03-04 12:36 381 查看
编写HelloWorld.smali文件:

.class public LHelloWorld;
.super Ljava/lang/Object;
.method public static main([Ljava/lang/String;)V
.registers 2
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
const-string v1, "Hello World!"
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
return-void
.end method


然后运行命令:

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

将classes.dex压缩成HelloWorld.zip文件

使用命令上传至Android手机的/sdcard/目录下

adb push HelloWorld.zip /sdcard

使用adb shell命令登陆手机,运行程序

dalvikvm -cp HelloWorld.zip HelloWorld
.class public LHelloWorld;
.super Ljava/lang/Object;
.method public static main([Ljava/lang/String;)V
.registers 4
.prologue
#空指令
nop
nop
nop
nop
#数据定义指令
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, "Hello World" #构造字符串
#方法调用指令
invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
#返回指令
:goto_0
return-void
.end method


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

java -jar smali.jar -o classes2.dex HelloWorld2.smali

将classes.dex压缩成HelloWorld.zip文件

adb push HelloWorld.zip /mnt/sdcard/

adb shell dalvikvm -cp /mnt/sdcard/HelloWorld.zip HelloWorld

adb push HelloWorld2.zip /mnt/sdcard/

adb shell dalvikvm -cp /mnt/sdcard/HelloWorld2.zip HelloWorld2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: