smali语法积累记录

1.constructor

我们知道运行一个类的时候会先调用static方法中的内容,比如:

  static
  {
    System.loadLibrary("qihooTest");
  }

为什么呢?

上面这段代码用smali语言写出来是这样的:

.method static constructor <clinit>()V  #不带参数的构造方法
    .locals 1

    .prologue
    .line 64
    const-string v0, "qihooTest"

    invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V

    .line 65
    return-void
.end method

可以看到这个方法是作为构造方法出现的,而Java的构造方法在类运行时是要自动运行的。至于<cliinit>和<init>,clinit是初始化静态的类变量,init是初始化实例变量

2.invoke-virtual和invoke-direct

时间: 2024-10-07 07:13:58

smali语法积累记录的相关文章

Smali语法简单介绍

Smali语言其实就是Davlik的寄存器语言: Smali语言就是android的应用程序.apk通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件,文件的展示语言. Smali语法简单介绍如下: Davlik字节码中,寄存器都是32位的,能够支持任何类型,64位类型(Long/Double)用2个寄存器表示: Dalvik字节码有两种类型:原始类型:引用类型(包括对象和数组)   原始类型:v   void  只能用于返回值类型 Z   boolean

smali语法小结

smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM与JVM的最大的区别之一就是Dalvik VM是基于寄存器的.基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行.Link Smali-数据类型 Davlik字节码中,寄存器都是32位的,能够支持任何类型,64位类型(Long/Double)用2个寄存器表示.Dalvik字节码有两种类型:原始类型:引用类型(包括对象和数组)@link. M1.基本数据类型 V void Z boolean B by

apk反汇编之smali语法

类型 Dalvik的字节码中拥有两个主要的类型:基类和引用类型.引用类型 引用类型是对象和数组,其他的一切都是基类   基类被一个简单的字符描述.我没有提出这些缩写词———他们实际以字符串的形式存储于dex文件中 他们被定义与dex格式网页文档中(在AOSP库中的路径是dalvik/docs/dex-format.html) V  空类型---仅仅可以用来作为返回类型 Z  Boolean 布尔型 B  Byte字节型 S  Short短整型(16位) C  Char字符型 I  Int 整形

Smali语法

看阿里巴巴的<深入探索Android热修复>,里面的代码看不懂,一查才知道是Smali语法,百度了语法,转载如下 转载自smali 语言语法 1.smali apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件.smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM与JVM的最大的区别之一就是Dalvik VM是基于寄存器的.基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行. 2.基本数据类型 B-by

Markdown语法学习记录

记录一下Markdown的语法,方便以后使用. 先把转义符写在最前面,没有它写不来这篇日志 加入链接 [链接显示的内容](链接的Link) 比如我要连接这篇讲解Markdown语法的文章链接显示的内容还可以给链接加Title,就是鼠标放在连接上时显示的内容.链接显示的内容 加粗 斜体 加两个星号**或下划线__表示加粗 比如加粗 加粗加入一个星号*或一个下划线_表示斜体 斜体 _ 斜体_ 段落级别 # 一级标题 二级标题 ## 二级标题 三级标题 ### 三级标题 四级标题 #### 四级标题

安卓破解软件需懂的Smali语法

Smali中语法: 类型 v   void  只能用于返回值类型 Z   boolean B   byte S   short C   char I    int J    long 2个寄存器 F   float D   double  2个寄存器 对象类型:Lpackage/name/ObjectName;  相当于java中的package.name.ObjectName;解释如下: L:表示这是一个对象类型 package/name:该对象所在的包 ::表示对象名称的结束 数组的表示形式

Oracle-4 - :超级适合初学者的入门级笔记:plsql,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器

初学者可以从查询到现在的pl/sql的内容都可以在我这里的笔记中找到,希望能帮到大家,视频资源在 资源, 我自己的全套笔记在  笔记 在pl/sql中可以继续使用的sql关键字有:update delete insert select--into commit  rollback savepoint   ,在这里需要注意的是查询跟以前有些不一样了 plsql由三个块组成:声明部分,执行部分,异常处理部分 declare:在此声明pl/sql用到的变量,类型及游标,以及局部的存储过程的和函数 be

使用INSERT…SELECT语法插入记录

前面,我们在谈INSERT语句时,使用两种语句:INSERT-SELECT  和  INSERT-VALUES. INSERT-SELECT可以使用子查询.因为在写SELECT时.  ***  =    ***,这就是子查询. 我们还以tdb_goods这张表为例,这张表目前一共有22条数据,但是这22条数据中有很多重复的信息,下面我们简单来查看一下. select * from tdb_goods\G; 比如这21.22条记录,他们的商品类别都是笔记本配件,他们的品牌都是索尼.这些都是重复的信

python基本语法学习记录

1     默认情况下,Python 3源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串. 2     Python中单行注释以#开头,多行注释用三个单引号(''')或者三个双引号(""")将注释括起来. 3     python最具特色的就是使用缩进来表示代码块.缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数. 4     自然字符串, 通过在字符串前加r或R. 如 r"this is a line with \n&quo