用smali写一个加法程序

用smali写一个加法程序

ID:8847109

大小:30.38 KB

页数:4页

时间:2018-04-09

用smali写一个加法程序_第1页
用smali写一个加法程序_第2页
用smali写一个加法程序_第3页
用smali写一个加法程序_第4页
资源描述:

《用smali写一个加法程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、最近对移动端产生了很浓厚的兴趣,那就开始学习吧!因为还有工作任务,忙里偷闲把丰生强的前3章认真读了一遍。小结内容是说必须熟练掌握这一部分的内容,可通过手动编写Dalvik汇编代码来熟悉一下指令,为后面的分析夯实好基础。书上的是一个显示HelloWorld的例子,为了练习好基础。准备要用Dalvik汇编写一个简单的程序,功能如下:按照书上的,把框架搭好如下:代码:.class public Ltest;.super Ljava/lang/Object;.method public constructor <

2、init>()V#寄存器数量待定    .registers 1 .parameter.prologue    return-void.end method思路:由于要传2个参数进去计算,并不是像书上的例子一样,只是打印出一行字,所以要弄清楚参数是如何传进去的。写一个简单的程序反编译看看。程序代码:代码:public class test2 {  public static void main(String[] args) {    String a = args[0];         }}编译成sma

3、li代码先看看参数是怎么样传进去的,smali代码如下:代码:.class public Ltest2;.super Ljava/lang/Object;.source "test2.java"# direct methods.method public constructor ()V    .registers 1    .prologue    .line 1    invoke-direct {p0}, Ljava/lang/Object;->()V    return-vo

4、id.end method.method public static main([Ljava/lang/String;)V    .registers 2    .prologue    .line 4    const/4 v0, 0x0    aget-object v0, p0, v0    .line 6    return-void.end method发现除了main函数外还有一个direct method:代码:.method public constructor ()V表示该类

5、的不带参数缺省的构造方法看来这就是传参的关键。代码:const/4 v0, 0x0 aget-object v0, p0, v0Main函数中用这2句的接受传进来的值。所以应该先添加这个构造方法:代码:# direct methods.method public constructor ()V    .registers 1    .prologue    invoke-direct {p0}, Ljava/lang/Object;->()V    return-void.end 

6、method接着写代码如下:代码:#V0 V1 清零 const/4 v0, 0x0 const/4 v1, 0x0#接收传进来的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    in

7、voke-static {v1}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I    move-result v1#两个参数相加  值存 给vo    add-int/2addr v0, v1#把vo中的结果转化成String类型  再给v0    invoke-static {v0}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;    move-result-object v0#构造一个Str

8、ing类型对象的新实例 把值赋给v2    new-instance v2, Ljava/lang/StringBuilder;#调用实例的直接方法    invoke-direct {v2}, Ljava/lang/StringBuilder;->()V#定义一个字符串常量    const-string v3, "The Sum is :"#调用实例方法,把v3与v2里的字符串相加再给v2 invoke-vir

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。