一、介绍

apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。
smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM与JVM的最大的区别之一就是Dalvik VM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。

二、类型

Java中的基本数据类型与Dalvik字节码类型的对应关系

Dalvik Java
B byte
C char
D double
F float
I int
S short
V void
J long
Z boolean

*注意J、Z两个不是对应类型的首字母;在dalvik字节码中,寄存器都是32位的,能够支持任何类型,Long和Double类型是64位的,需要2个寄存器;V 只能用于返回值类型;

三、描述类的信息

在打开smali文件的时候,它的头三行描述了当前类的一些信息
.class < 访问权限> [ 修饰关键字] < 类名>
.super < 父类名>
.source <源文件名>
.class指令表示当前的类名,类的访问权限是public,类名为LHelloWorld,类开头的L表示后面跟随的字符串是一个类。
.super指定了当前类所继承的父类,后面指的就是这个父类的类名,L表示后面跟的字符串是一个类.
例:

.class public Lcom/tt/android/xigua/detail/c/a$1;
.super Ljava/lang/Object;
.source "SourceFile"

四、静态字段

#static fields
.field < 访问权限> static [ 修饰关键字]< 字段名>:< 字段类型>
baksmali在生成smali文件时,会在静态字段声明的起始处添加注释”static fields”,注释是以#开头。
访问权限包括:private、protected、public修饰关键字为字段其他属性。
例:

# static fields
.field public static a:Lcom/meituan/robust/ChangeQuickRedirect;

五、实例字段

#instance fields
.field < 访问权限> [ 修饰关键字] < 字段名>:< 字段类型>
例:

# instance fields
.field final synthetic b:Lcom/tt/android/xigua/detail/c/a;

六、直接方法

直接方法指的是该类中定义的方法。
#direct methods
.method <访问权限> [ 修饰关键字] < 方法原型>、
<.registers>、<.locals> [.param][.prologue][.line]<代码体>
.end method
例:

.method public f()Ljava/lang/String;.locals 4.prologue.line 196608const/4 v0, 0x0…………………….line 196609
.end method

#direct methods 是注释,是baksmali添加的,访问权限和修饰关键字 跟字段是一样的。方法原型 描述了
方法的名称、参数与返回值。
.registers 指令指定了方法中寄存器的总数,这个数量是参数和本地变量总和。
.param 表明了方法的参数,每个.param指令表示一个参数,方法使用了几个参数就有几个.parameter指令。
.prologue 指定了代码的开始处,混淆过的代码可能去掉了该指令。
.line 指明了该处代码在源代码中的行号,同样,混淆后的代码可能去掉了行号。
.local 使用这个指定表明方法中非参寄存器

七、虚方法

虚方法指的是从父类中继承的方法或者实现的接口的方法,它的声明跟直接方法相同,
只是起始的初始为“virtual methods”。
#virtual methods
.method <访问权限> [ 修饰关键字] < 方法原型>
<.registers><.locals> [.param] [.prologue] [.line] <代码体>
.end method

八、接口

如果一个类实现了一个接口,那么会在smali文件中用.implements指令指出。
#interfaces
.implements < 接口名>
#interfaces是注释,
.implements 是接口关键字,后面的接口名是 DexClassDef 结构中 interfacesOff 字段指定的内容

# interfaces
.implements Lcom/tt/floatwindow/video/a/d;
console.log("公众号:虫术")
Blog:http://404nofoundx.top/

smali语法基础详解相关推荐

  1. [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. 03 html基础详解

    02html基础详解 文章目录 02html基础详解 1.HTML编辑器 2.标签 html常用标签 3.元素 4.属性 常用属性 5.标题 水平线 注释 6.段落 折行 7.格式化标签 属性dir ...

  3. Power BI 之 DAX语法规范详解1

    文章预览: Power BI 之 DAX语法规范详解 1 前言 表构造函数{()} Lookupvalue函数 Related函数: Relatedtable函数 筛选引擎Calculate 单条件筛 ...

  4. 主线剧情03-NXP-i.MX系列的u-boot移植基础详解

    u-boot 移植基础详解 本文系广泛撷取.借鉴和整理(相关的内容在网络上有很多,但很多相互抄,或者是版本太老,或者就是不通用的非常有平台针对性的步骤,碎片化泛滥,甚至就是有待分拣的垃圾厂,当然也有一 ...

  5. shell脚本编程神器之awk语法案例详解

    AWK入门指南 文章目录 shell脚本编程神器之awk语法案例详解 安装AWK AWK 起步示例 AWK程序的结构 执行 awk 程序 awk 的错误提示 简单输出 打印每一行 打印特定行 NF,字 ...

  6. c 语言中 %是什么运算符,C 语言基础----详解C中的运算符

    C语言中又有哪些运算符呢? 如下所示: ※ 算术运算符 ※ 赋值运算符 ※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则 ...

  7. 计算机网络中的语法 语义 时序的概念,网络iso协议及语义语法时序详解

    网络iso协议及语义语法时序详解 计算机学习 网络协议的三要素 在计算机网路中,通信发生在不同系统的实体之间,,实体(entity)是能够发送和接收信息的任何事物.然而,两个实体间仅发送比特流就指望能 ...

  8. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  9. Atitit.jdk java8的语法特性详解 attilax 总结

    Atitit.jdk java8的语法特性详解 attilax 总结 1.1. 类型推断这个特别有趣的.鲜为人知的特性1 2. Lambda1 2.1. 内部迭代意味着改由Java类库来进行迭代,而不 ...

  10. 【云原生之k8s】k8s基础详解

    [云原生之k8s]k8s基础详解 前言 一.kubernetes介绍 (1)kubernetes简介 (2)应用部署方式的演变 二.kubernetes组件 (1)kubernetes架构 (2)ma ...

最新文章

  1. 信息系统项目管理师 必背
  2. 云计算:革新动力并不是一把万能钥匙
  3. iOS之富文本(二)
  4. Python读取文本的三种方式对比
  5. 微信小程序页面文字超出一行隐藏,文字超出两行隐藏。
  6. web开发中常用的概念
  7. 修改DOS窗口编码格式
  8. java api math_JAVA 函数 Math API
  9. php.ini用哪个,php.ini:哪一个?
  10. “小程序”的最佳入口位置--关于微信小程序的思考笔记
  11. 21. RequireJS
  12. fcntl.h里没有open_国际高中课程里的IB课程 你了解多少?
  13. Windows 2003 + ISA 2006+单网卡×××配置(3)
  14. 2020 工业机器人行业研究报告
  15. 男朋友智商测试大集结(一):Oracle数据库查询操作练习81题(附答案)
  16. [数据可视化] 南丁格尔玫瑰图
  17. grpc报错rpc error:code=DeadlineExceeded desc = context deadline exceeded
  18. 捋一捋Kafka中的消费者API
  19. 安卓集成Google登录并进一步获取性别生日手机号等信息
  20. VBA程序升级,vba在线更新

热门文章

  1. 中国互联网发展状况报告:境内约 2.6 万网站被植入后门
  2. 大数据平台搭建技术底座 四行业迎来新机遇
  3. Shell 脚本大全(收藏好)
  4. java毕业设计——基于java+Java Swing+sqlserver的图书馆书库管理系统设计与实现(毕业论文+程序源码)——图书馆书库管理系统
  5. WINRAR 4.00版注册方法
  6. access考试素材_access数据库考试试题及答案.doc
  7. ET Reporter
  8. 【汇编】DOS系统功能调用(INT 21H)
  9. 计算机学报在线阅读,计算机学报CHIN
  10. 车站订票系统可行性分析报告