一.什么是Smali?

Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种dex格式文件的汇编器,反汇编器。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了.dex格式所有功能(注解,调试信息,线路信息等)

二.smali的语法

1.原始类型

  • B---byte
  • C---char
  • D---double
  • F---float
  • I---int
  • J---long
  • S---short
  • V---void
  • Z---boolean
  • [XXX---array
  • Lxxx/yyy---object

解析下最后两项,数组的表示方式是:

  • 在基本类型前加上前中括号“[”,例如int数组和float数组分别表示为:[I、[F;
  • 对象的表示则以L作为开头,格式LpackageName/objectName;(注意必须有个分号跟在最后),例如String对象在smali中为:Ljava/lang/String;,其中java/lang对应java.lang包,String就是定义在该包中的一个对象。

2.方法的定义

格式:Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type

注意:参数和参数间没有任何分隔符,

1.hello()v

  就是void hello()

2.hello(lll)Z

  就是boolean hello(int,int,int)

3.hello(Z[l[lLjava/lang/String;J)Ljava/lang/String

  就是String hello(boolean,int[],int[],String,long)

3.基本语法

  • .field private isFlag:z  定义变量
  • .method  方法
  • .parameter  方法参数
  • .prologue  方法开始
  • .line 123  此方法位于第123行
  • invoke-super  调用父函数
  • const/high16  v0, 0x7fo3  把0x7fo3赋值给v0
  • invoke-direct  调用函数
  • return-void  函数返回void
  • .end method  函数结束
  • new-instance  创建实例
  • iput-object  对象赋值
  • iget-object  调用对象
  • invoke-static  调用静态函数

4.条件跳转分支:

"if-eq vA, vB, :cond_**"   如果vA等于vB则跳转到:cond_**

"if-ne vA, vB, :cond_**"   如果vA不等于vB则跳转到:cond_**

"if-lt vA, vB, :cond_**"    如果vA小于vB则跳转到:cond_**

"if-ge vA, vB, :cond_**"   如果vA大于等于vB则跳转到:cond_**

"if-gt vA, vB, :cond_**"   如果vA大于vB则跳转到:cond_**

"if-le vA, vB, :cond_**"    如果vA小于等于vB则跳转到:cond_**

"if-eqz vA, :cond_**"   如果vA等于0则跳转到:cond_**

"if-nez vA, :cond_**"   如果vA不等于0则跳转到:cond_**

"if-ltz vA, :cond_**"    如果vA小于0则跳转到:cond_**

"if-gez vA, :cond_**"   如果vA大于等于0则跳转到:cond_**

"if-gtz vA, :cond_**"   如果vA大于0则跳转到:cond_**

"if-lez vA, :cond_**"    如果vA小于等于0则跳转到:cond_**

最新文章

  1. Linux命令操作
  2. [设计模式] javascript 之 单件模式
  3. servlet中cookie的使用
  4. 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ..
  5. 如何配置SSH Keys登录
  6. Oracle EBS-SQL (OM-6):打开订单.sql
  7. EC读书笔记系列之3:条款5、条款6、条款7
  8. Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.
  9. Angularjs跳转切换至对应选项卡
  10. 向MapReduce转换:生成用户向量
  11. 编写OC高质量的代码的有效方法
  12. word20170107当地交通 Local transportation有用的词和句子
  13. django drf 基础学习4
  14. 使用mediainfo工具统计每个视频文件(媒体文件)播放时长
  15. WBS分析
  16. window.open()新开网页被拦截
  17. Mysql 索引问题集锦
  18. SQL Server进阶(三)单表查询
  19. 如何在你的Vue项目配置vux
  20. OpenStack上搭建Q版的公共环境准备(step1)

热门文章

  1. IE7中a标签包含img,点击img,链接失效的bug
  2. NOIP2017赛前模拟(4):总结
  3. 最新版浏览器报错net::ERR_INSECURE_RESPONSE原因
  4. UVA 10003 Cutting Sticks(区间dp)
  5. 【Tyvj2133&BZOJ1146】网络管理Network(树套树,DFS序,树状数组,主席树,树上差分)
  6. vue-cli脚手架每行注释--摘抄
  7. 基于promise和script标签的jsonp
  8. 怎样更改SQL Server 2008的身份验证方式(转)
  9. sqlite 使用
  10. hdu 4503(数学,概率)