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. Markdown语法简单介绍

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 一.标题 # 这是标题一 ## 这是标题二 ### 这是标题三 #### 这是标题 ...

  3. Smali语法编程

    Smali背景: Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器.其语法是一种宽松式的Jasmin/dedexer语法,而 ...

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

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

  5. Markdown简单介绍和基本的语法

    原文发表自我的个人站点 http://www.hainter.com/markdown.欢迎大家訪问,谢谢支持~ Markdown是一种语言,能够用于编写高质量的文章,语法简单易用 Markdown的 ...

  6. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  7. angular1.x的简单介绍(二)

    首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...

  8. iOS开发Swift篇—(一)简单介绍

    iOS开发Swift篇—简单介绍 一.简介 Swift是苹果于2014年WWDC(苹果开发者大会)发布的全新编程语言 Swift在天朝译为“雨燕”,是它的LOGO 是一只燕子,跟Objective-C ...

  9. Linux curl使用简单介绍

    在两台新搬迁的微信服务器上执行命令: curl -H "Content-Type: application/json" -d '{"partner_no":&q ...

随机推荐

  1. C# byte[] 转换16进制字符串

    1.byte[] 转换16进制字符串 1.1 BitConverter方式 var str = DateTime.Now.ToString(); var encode = Encoding.UTF8; ...

  2. dragstart drag dragend dragenter dragover dragleave drop

    dragstart drag dragend dragenter dragover dragleave drop   前端框架层出不穷,网页上的效果越来越绚丽,制作绚丽的效果的成本越来越低,其中有种拖 ...

  3. sublime text配置fcitx输入法

    sublime text配置fcitx输入法 环境:Fedora20 输入法:fcitx sublime text:version 3 安装fcitx输入法 这个看前面教程 编译sublime-imf ...

  4. sicily 1046. Plane Spotting(排序求topN)

    DescriptionCraig is fond of planes. Making photographs of planes forms a major part of his daily lif ...

  5. QT STUDY 模型-视图-控制器

  6. IDEA导入eclipse项目并部署运行完整步骤(转发)

    首先说明一下:idea里的project相当于eclipse里的workspace,而idea里的modules相当于eclipse里的project 1.File-->Import Proje ...

  7. 如何快速分析出现性能问题的Linux服务器

    Brendan Gregg曾经分享过当遇到一个系统性能问题时,如何利用登录的前60秒对系统的性能情况做一个快速浏览和分析,主要包括如下10个工具,这是一个非常有用且有效的工具列表.本文将详细介绍这些命 ...

  8. 推荐:这才是你寻寻觅觅想要的 Python 可视化神器

    Plotly Express 是一个新的高级 Python 可视化库:它是 Plotly.py 的高级封装,它为复杂的图表提供了一个简单的语法. 受 Seaborn 和 ggplot2 的启发,它专门 ...

  9. read file into shell vars

    test.ksh value=$(<rosstest.txt)echo $value

  10. Eclipse导入SVN项目的三种方式

    Eclipse导入SVN项目的三种方式 一.直接Import导入: 1.点击 File --> Import,进入导入项目窗口 2.选择从SVN检出项目,点击Next 3.选择创建新的资源库位置 ...