#算数运算 Java代码:

public void num(int b){int a = b;boolean b1 = true;Log.d("MainActivity","a + b ="+(a+b));Log.d("MainActivity","a - b ="+(a-b));Log.d("MainActivity","a * b ="+(a*b));Log.d("MainActivity","a / b ="+(a/b));Log.d("MainActivity","a % b ="+(a%b));
}

与之对应的smali代码:

.method public num(I)V.locals 5                  #定义局部变量寄存器.param p1,"b"         #声明参数.prologue                #代码开始.line 30move v0, p1            #数据变量赋值    .line 31.local v0, "a":I        #定义局部变量const/4 v1, 0x1     #数据常量赋值.line 32.local v1, "b1":Z    #定义局部变量const-string v2, "MainActivity"    #定义字符串常量new-instance v3,Ljava/lang/StringBuilder;    #创建StringBuilder对象invoke-direct {v3},Ljava/lang/StringBuilder;-><init>()V #调用构造const-string v4,"a+b="    #调用虚方法  v3.append(v4)invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;move-result-object v3    #将返回值放入v3add-int v4,v0,p1        #v4=v0+v1invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;    # v3.append(v4)move-result-object v3invoke-virtual v3, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v3invoke-static {v2,v3},Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String)    #调用静态方法.line 33const-string v2,"MainActivity"new-instance v3,Ljava/lang/StringBuilder;-><init>Vconst-string v4,"a-b="invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v3sub-int v4,v0,p1        #v4 = v0 - p1invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v3invoke-virtual v3, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v3invoke-static {v2,v3},Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String) .line 34const-string v2,"MainActivity"new-instance v3,Ljava/lang/StringBuilder;-><init>Vconst-string v4,"a/b="invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v3div-int v4,v0,p1        #v4 = v0 / p1invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v3invoke-virtual v3, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v3invoke-static {v2,v3},Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String) .line35const-string v2,"MainActivity"new-instance v3,Ljava/lang/StringBuilder;-><init>Vconst-string v4,"a*b="invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v3mul-int v4,v0,p1    #v4 = v0 * p1invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v3invoke-virtual v3, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v3invoke-static {v2,v3},Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String) .line 36const-string v2,"MainActivity"new-instance v3,Ljava/lang/StringBuilder;-><init>Vconst-string v4,"a/b="invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v3rem-int v4,v0,p1        #v4 = v0 % p1invoke-virtual {v3,v4}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;move-result-object v3invoke-virtual v3, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;move-result-object v3invoke-static {v2,v3},Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String) .line 37return-void
.end method

可以看到关于算数运算的代码如下:

    add-int v4, v0 ,p1        加法,v4 = v0 + p1sub-int v4, v0 ,p1        减法,v4 = v0 - p1mul-int v4, v0 ,p1        乘法,v4 = v0 * p1div-int v4, v0 ,p1        除法,v4 = v0 / p1rem-int v4, v0 ,p1        取余,v4 = v0 % p1

转载于:https://my.oschina.net/u/2478321/blog/841403

Smali语法学习五相关推荐

  1. Android逆向入门7——Smali语法学习(1)

    这一节我们一起探讨smali语法和smali在Android逆向中的应用,它是Android逆向世界中不可或缺的一部分. 简单的来说,Dex反编译的结果就是Smali,Smali和dex之间的关系,我 ...

  2. Smali语法学习三

    寄存器与变量 Java中的变量都是放在内存中的,安卓为了提高性能,变量都是放在寄存器中的.寄存器为32位,可以支持任何类型.其中long和double这种64为的类型需要两个寄存器保存.寄存器采用v和 ...

  3. notepad++ smali语法高亮模板分享

    某论坛也有,但是太难看了, 前面介绍了一些工具可以反编译dex文件为smali文件,在Android程序逆向分析中,阅读smali代码已然是十分重要的,但各种代码编辑器都无法较好的支持smali文件的 ...

  4. smali语法中文版

           这是学习Smali重中之中,不过现在有些反编译的软件已经存在相应的插件,可以直接看到这些操作码名称的中文解释(如:Android killer),但是对其进行学习还是非常有必要的.以下是 ...

  5. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  6. (17)Verilog时钟与复位激励-基本语法(五)(第4天)

    (17)Verilog时钟与复位激励-基本语法(五)(第4天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)Verilog时钟与复位激励-基本语法(五)(第4天 ...

  7. jsx 调用php,JavaScript_JavaScript的React框架中的JSX语法学习入门教程,什么是JSX? 在用React写组件的 - phpStudy...

    JavaScript的React框架中的JSX语法学习入门教程 什么是JSX? 在用React写组件的时候,通常会用到JSX语法,粗看上去,像是在Javascript代码里直接写起了XML标签,实质上 ...

  8. Go基础语法学习总结

    Go基础语法学习总结 一.基础语法 1.常见数据类型 数据类型包括有:布尔类型.字符串类型.数字类型(整型.浮点型.复数等).派生类型(数组类型.slice 切片类型.map 集合类型.struct ...

  9. VHDL语法学习笔记:一文掌握VHDL语法

    今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货. VHDL语法学习笔记 一.VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed ...

最新文章

  1. 如何在OSCOMMERCE中安装中文语言包
  2. centos6.5 mysql 远程访问_centos6.5 mysql 设置支持远程ip访问
  3. 30个数据可视化超级工具_Python5个数据可视化工具
  4. mybatis拦截器实现通用权限字段添加
  5. Python技术知识清单(数据科学)
  6. 记一次成功的sql注入入侵检测附带sql性能优化
  7. 答应我,别再靠!= null走天下了可以吗?
  8. javaScript 中的异步编程
  9. 为什么python胶水语言_为什么只有python成了胶水语言?
  10. parcel打包报错Error opening directory
  11. 林奇社区群主招募!福利福利福利!
  12. 设计模式之桥接模式:如何实现抽象协议与不同实现的绑定?
  13. python编写背单词程序
  14. parquet和textfile存储对比
  15. 经典蓝牙与低功耗蓝牙的区别(转)
  16. Parallels Desktop2023最新版免费虚拟机软件
  17. 人为何有指纹【转自生物谷】
  18. 拉格朗日插值代码python实现(不掉包)
  19. 水声通信matlab,MC-PSK在远程水声通信中的应用及其性能仿真
  20. JS贪吃蛇小游戏(DOM (html+css+js))

热门文章

  1. 默认的, VC调试器只能正常显示ANSI字符串及UNICOD
  2. 指针空值——nullptr
  3. 【Python网络开发-黏包问题(三)黏包问题的解决办法】
  4. JavaWeb入门-JQuery
  5. 【第五部分 | JS WebAPI】6:PC端网页特效与本地存储
  6. 电子计算机系学生会特色活动,计算机系学生会文艺部计划
  7. 西安理工大学计算机组成原理,2008秋季西安理工大学计算机组成原理考试题.doc...
  8. mysql8 1251错误_navicat错误1251
  9. 程序员必须知道的职场规则
  10. 寝室打扫卫生负责人查询