Smali语法学习五
#算数运算 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语法学习五相关推荐
- Android逆向入门7——Smali语法学习(1)
这一节我们一起探讨smali语法和smali在Android逆向中的应用,它是Android逆向世界中不可或缺的一部分. 简单的来说,Dex反编译的结果就是Smali,Smali和dex之间的关系,我 ...
- Smali语法学习三
寄存器与变量 Java中的变量都是放在内存中的,安卓为了提高性能,变量都是放在寄存器中的.寄存器为32位,可以支持任何类型.其中long和double这种64为的类型需要两个寄存器保存.寄存器采用v和 ...
- notepad++ smali语法高亮模板分享
某论坛也有,但是太难看了, 前面介绍了一些工具可以反编译dex文件为smali文件,在Android程序逆向分析中,阅读smali代码已然是十分重要的,但各种代码编辑器都无法较好的支持smali文件的 ...
- smali语法中文版
这是学习Smali重中之中,不过现在有些反编译的软件已经存在相应的插件,可以直接看到这些操作码名称的中文解释(如:Android killer),但是对其进行学习还是非常有必要的.以下是 ...
- Python基础语法学习笔记
Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...
- (17)Verilog时钟与复位激励-基本语法(五)(第4天)
(17)Verilog时钟与复位激励-基本语法(五)(第4天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)Verilog时钟与复位激励-基本语法(五)(第4天 ...
- jsx 调用php,JavaScript_JavaScript的React框架中的JSX语法学习入门教程,什么是JSX?
在用React写组件的 - phpStudy...
JavaScript的React框架中的JSX语法学习入门教程 什么是JSX? 在用React写组件的时候,通常会用到JSX语法,粗看上去,像是在Javascript代码里直接写起了XML标签,实质上 ...
- Go基础语法学习总结
Go基础语法学习总结 一.基础语法 1.常见数据类型 数据类型包括有:布尔类型.字符串类型.数字类型(整型.浮点型.复数等).派生类型(数组类型.slice 切片类型.map 集合类型.struct ...
- VHDL语法学习笔记:一文掌握VHDL语法
今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货. VHDL语法学习笔记 一.VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed ...
最新文章
- 如何在OSCOMMERCE中安装中文语言包
- centos6.5 mysql 远程访问_centos6.5 mysql 设置支持远程ip访问
- 30个数据可视化超级工具_Python5个数据可视化工具
- mybatis拦截器实现通用权限字段添加
- Python技术知识清单(数据科学)
- 记一次成功的sql注入入侵检测附带sql性能优化
- 答应我,别再靠!= null走天下了可以吗?
- javaScript 中的异步编程
- 为什么python胶水语言_为什么只有python成了胶水语言?
- parcel打包报错Error opening directory
- 林奇社区群主招募!福利福利福利!
- 设计模式之桥接模式:如何实现抽象协议与不同实现的绑定?
- python编写背单词程序
- parquet和textfile存储对比
- 经典蓝牙与低功耗蓝牙的区别(转)
- Parallels Desktop2023最新版免费虚拟机软件
- 人为何有指纹【转自生物谷】
- 拉格朗日插值代码python实现(不掉包)
- 水声通信matlab,MC-PSK在远程水声通信中的应用及其性能仿真
- JS贪吃蛇小游戏(DOM (html+css+js))
热门文章
- 默认的, VC调试器只能正常显示ANSI字符串及UNICOD
- 指针空值——nullptr
- 【Python网络开发-黏包问题(三)黏包问题的解决办法】
- JavaWeb入门-JQuery
- 【第五部分 | JS WebAPI】6:PC端网页特效与本地存储
- 电子计算机系学生会特色活动,计算机系学生会文艺部计划
- 西安理工大学计算机组成原理,2008秋季西安理工大学计算机组成原理考试题.doc...
- mysql8 1251错误_navicat错误1251
- 程序员必须知道的职场规则
- 寝室打扫卫生负责人查询