Smali语言其实就是Davlik的寄存器语言;

Smali语言就是android的应用程序.apk通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件,文件的展示语言。

Smali语法简单介绍如下

Davlik字节码中,寄存器都是32位的,能够支持任何类型,64位类型(Long/Double)用2个寄存器表示;

Dalvik字节码有两种类型:原始类型;引用类型(包括对象和数组)

  原始类型:v   void  只能用于返回值类型

Z   boolean

B   byte

S   short

C   char

I    int

J    long(64位)

F   float

D   double(64位)

对象类型:Lpackage/name/ObjectName;  相当于java中的package.name.ObjectName;解释如下:

L:表示这是一个对象类型

package/name:该对象所在的包

;:表示对象名称的结束

 数组的表示形式:

                                  [I  :表示一个整形的一维数组,相当于java的int[];

对于多维数组,只要增加就行了,[[I = int[][];注:每一维最多255个; 

               对象数组的表示形式:

                                   [Ljava/lang/String    表示一个String的对象数组;

  

               方法的表示形式:

                                   Lpackage/name/ObjectName;——>methodName(III)Z  详解如下:

Lpackage/name/ObjectName  表示类型

methodName   表示方法名

III   表示参数(这里表示为3个整型参数)

说明:方法的参数是一个接一个的,中间没有隔开;

字段的表示形式:

                                    Lpackage/name/ObjectName;——>FieldName:Ljava/lang/String;

即表示: 包名,字段名和各字段类型

有两种方式指定一个方法中有多少寄存器是可用的:

                                     .registers  指令指定了方法中寄存器的总数

                                     .locals        指令表明了方法中非参寄存器的总数,出现在方法中的第一行

        方法的传参:

                当一个方法被调用的时候,方法的参数被置于最后N个寄存器中;

                          例如,一个方法有2个参数,5个寄存器(v0~v4)

                                      那么,参数将置于最后2个寄存器(v3和v4)

                 非静态方法中的第一个参数总是调用该方法的对象;

                 说明:对于静态方法除了没有隐含的this参数外,其他都一样

          寄存器的命名方式:

                  V命名

                  P命名  第一个寄存器就是方法中的第一个参数寄存器

                  比较:使用P命名是为了防止以后如果在方法中增加寄存器,需要对参数寄存器重新进行编号的缺点

                  特别说明一下:Long和Double类型是64位的,需要2个寄存器

                           例如:对于非静态方法

                                       LMyObject——>myMethod(IJZ)V;

                                       有4个参数:LMyObject,int,long,bool;   需要5个寄存器来存储参数;

                                                            P0    this

                                                            P1    I (int)

                                                            P2,P3  J (long)

                                                            P4    Z(bool)

Smali语法简单介绍相关推荐

  1. shell语法简单介绍

    一.基本的语法 1.1.shell文件开头 shell文件必须以以下的行開始(必须方在文件的第一行):  #!/bin/sh  符号#!用来告诉系统它后面的參数是用来运行该文件的程序.在这个样例中我们 ...

  2. Android:Smali语法中文介绍

    原文地址:http://jishu521.com/post/annokie/7978799.html dalvik字节码有两种类型,原始类型和引用类型.对象和数组是引用类型,其它都是原始类型. Vvo ...

  3. css中a标签锚点、内部样式引入详解,css语法简单介绍

    1.a标签锚点 利用a标签的锚点来跳转到指定锚点处href:写锚点名称 ​1.定义锚点(不用a标签来定义锚点,用id属性来定义锚点名称 id="box1" box1就是锚点名称)2 ...

  4. client高性能组件化框架React简单介绍、特点、环境搭建及经常使用语法

    [本文源址:http://blog.csdn.net/q1056843325/article/details/54729657 转载请加入该地址] 明天就是除夕了 预祝大家新春快乐 [ ]~( ̄▽ ̄) ...

  5. php $rs1- gt eof,PHP_PHP速成大法,简单介绍一下PHP的语法 1、嵌 - phpStudy

    PHP速成大法 简单介绍一下PHP的语法 1.嵌入方法: 类似ASP的,当然您也可以自己指定. 2.引用文件: 引用文件的方法有两种:require 及 include. require 的使用方法如 ...

  6. Less的简单介绍、使用、语法

    一.简单介绍 less是将CSS简单化的工具,并且拥有更强的逻辑性和计算能力 在使用Less时,首先需要下载Less插件,下载完成之后,代码写在less文件中,保存之后会自动生成css文件,并将生成的 ...

  7. SMALI语法入门教程

    安卓修改大师可以对任何没有加固过的APK安装包进行反编译,如果要实现破解或者增加功能,需要您有一定的SMALI语法基础.对安卓进行源代码级别的修改必须要在反编译生成的SMALI代码中进行修改.本教程是 ...

  8. 2021年大数据ELK(十五):Elasticsearch SQL简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch SQL简单介绍 一.SQL与Elasticsear ...

  9. 求介绍matlab函数用法的书,MATLAB初学者教程--函数用法的简单介绍

    1.4 函数用法的简单介绍 1.4.1什么是函数 似乎很多人一听到函数这个词就会想到数学中的某个概念,然后对于恐惧数学的同学就开始打退堂鼓.在matlab当中到处可以用到函数,它的出现可以让我们用很简 ...

最新文章

  1. 视频jourk--hadoop2.2.0(第一个2.x的正式版本)框架介绍:笔记
  2. Linux压缩命令总结
  3. 如何能出令自己满意的代码
  4. 工厂模式理解_工厂模式
  5. 计算机语言学习导论[C/C++]
  6. Linux基础四---系统监控硬盘分区
  7. sklearn文本特征提取
  8. 背景图(css sprite)尺寸设置,DIPS,设备像素比,Retina,,border 1px问题
  9. MVPArms框架学习遇到的一个问题——普通Activity配合Fragment出现空指针
  10. QQ群排名优化规则-学会后10分钟全国排名第一
  11. EXCEL绘制均值极差控制图
  12. 小米3手机无法打开WLAN ,WIFI 的解决方法,不需刷机
  13. 谷歌语法和FOFA常用语法总结
  14. Linux内核“问题门”——学习问题、经验集锦(持续更新中……)
  15. 编码规则的发展历程(通俗版)
  16. 怎么上传云班课的计算机作业,云班课如何提交课后作业 作业提交教程
  17. Mac 解压缩rar文件
  18. Compose Wheel组件。滚轮组件
  19. SSH 官网下载地址
  20. Visio工具的跨线解决问题

热门文章

  1. cesium 设置时间_Cesium之地形制作与合并
  2. linux操作系统上网,linux操作系统下无法上网
  3. 算法设计与分析 0 算法与性能:GCD与冒泡排序
  4. matlab while循环
  5. 【 MATLAB 】基本序列运算及其MATLAB的等效表示
  6. C标准库 limits.h
  7. 2019年Java和JVM生态系统预测:OpenJDK将成为Java运行时市场领导者
  8. Spark分析之Standalone运行过程分析
  9. shell里面的参数
  10. How to get pure json data by ajax request