用smali写一个java加法程序和HelloWorld程序
来源:互联网 发布:淘宝网首页制作 编辑:程序博客网 时间:2024/06/03 21:28
最近看完丰虫大大的《Android软件安全与逆向分析》前三章,自己动手用smali写一个java加法程序和HelloWorld程序,也算对前期学习的一个总结。
1.java加法程序:
首先搭建好类文件的框架:
.class public Ltest2;.super Ljava/lang/Object;.source "test2.java"# direct methods.method public constructor <init>()V .registers 1 .prologue invoke-direct {p0}, Ljava/lang/Object;-><init>()V return-void.end method.method public static main([Ljava/lang/String;)V .registers 5 .prologue return-void.end method
注意:return-void这行不要忘记写,否则之后把smali文件转换成dex文件时会报错。
之后添加main()方法的功能:
.method public static main([Ljava/lang/String;)V .registers 5 .prologue #V0 V1 清零 const/4 v0, 0x0 const/4 v1, 0x1 #接收传进来的2个参数 aget-object v0, p0, v0 aget-object v1, p0, v1 #把第一个参数转化成int类型,值存给vo invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v0 #把第二个参数转化成int类型,值存给v1 invoke-static {v1}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I move-result v1 #两个参数相加,值存给vo add-int/2addr v0, v1 #把vo中的结果转化成String类型,值存给vo invoke-static {v0}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; move-result-object v0 #构造一个StringBuilder类型对象的新实例 把值赋给v2 new-instance v2, Ljava/lang/StringBuilder; #调用实例的直接方法 invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V #定义一个字符串常量 const-string v3, "The Sum is :" #调用实例方法,把v3与v2里的字符串相加再给v2 invoke-virtual{v2,v3},Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 #调用实例方法,把v0与v2里的字符串相加再给v2 invoke-virtual{v2,v0},Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 #赋给v1值System.out sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream; #输出结果 invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V return-void.end method
保存后,将其转换为dex文件:
导入Android设备:
最后,运行.dex文件:
可以看到:向main()方法输入两个参数5、5,最后得到结果10。
2.HelloWorld程序:这个程序功能非常简单,就是输出“HelloWorld”字符串。
首先建立类文件基本框架:
.class public LHelloWorld;.super Ljava/lang/Object;.source "HelloWorld.java".method public constructor <init>()V .registers 1 .prologue invoke-direct {p0}, Ljava/lang/Object;-><init>()V return-void.end method.method public static main([Ljava/lang/String;)V .registers 4 .prologue.end method
然后完善main()方法的功能:
.method public static main([Ljava/lang/String;)V .registers 4 .prologue nop const/4 v0,0x0 const/4 v1,0x1 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
将.smali文件转换为.dex文件:
将.dex文件导入Android手机:
运行.dex文件:
这样,所有步骤就都完成了,需要注意的是,向Android设备中导入文件,需要获得所操作文件夹的读写权限。
阅读全文
0 0
- 用smali写一个java加法程序和HelloWorld程序
- 用Smali写一个加法程序
- dos写helloworld程序总结 java 和 javac的使用
- 让我们用Backbone.js来写一个HelloWorld程序。
- 在inet下写一个“HelloWorld”程序
- java学习之用记事本写简单的HelloWorld程序
- 用java写一个HelloWorld
- 一个标准的helloworld程序(java)
- Java最简单的一个程序 HelloWorld
- (4)用记事本写Java程序HelloWorld,以及用控制台如何执行程序
- 用java写的一个压缩程序
- 用java写一个计算器程序
- 一个用JAVA写的画图程序
- 用Java写一个在线金山词霸程序
- 一个Android程序 Helloworld
- 不用main()方法就写一个"HelloWorld"程序
- node.js写一个简单的helloWorld程序
- java rmi helloworld程序
- codeforces675D set
- 网络结构可视化步骤
- Build Palindrome
- codeforces——520A——Pangram
- 【牛客网】算法编程题汇总
- 用smali写一个java加法程序和HelloWorld程序
- 计蒜客 无脑博士的试管们 (bfs+模拟)
- SQLAlchemy查询过滤器和执行函数
- Torch
- OnClientClick=“” 返回值为false,为什么还能提交解决方法
- VPS主机
- 【2014年第五届蓝桥杯C/C++程序设计本科B组决赛 生物芯片(编程大题) 】
- SharePreference
- 基于jQuery的左滑出现删除按钮