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
在做360无线攻防第二题的时候,这个函数:
public void onClick(View paramView)
{
MainActivity.this.packageNameCheck();
}
原文件反编译出来后是:
invoke-direct {p0}, Lcom/qihoo/crack/MainActivity;->packageNameCheck()V
而看雪上人家修改后的这个函数反编译出来后,是:
invoke-virtual {p0}, Lcom/qihoo/crack/MainActivity;->packageNameCheck()V
一开始很疑惑,后来一想他们之间的不同,发现:
原来的类调用的packageNameCheck方法就在这个类中;而修改后的类继承了另外一个类,且packageNameCheck在父类中。
另外,书上写的:
invoke-virtual 或 invoke-virtual/range 调用实例的虚方法
由此猜想,invoke-virtual代表引用非本类中的方法(那invoke-super行不行呢?)。
9月25日补充,在调用so的过程中通过另一个so作媒介也是需要把direct改成virtual的,详见上面的题目链接。
smali语法积累记录的更多相关文章
- Smali语法编程
Smali背景: Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器.其语法是一种宽松式的Jasmin/dedexer语法,而 ...
- Smali语法
看阿里巴巴的<深入探索Android热修复>,里面的代码看不懂,一查才知道是Smali语法,百度了语法,转载如下 转载自smali 语言语法 1.smali apk文件通过apktool反 ...
- Smali语法简单介绍
Smali语言其实就是Davlik的寄存器语言: Smali语言就是android的应用程序.apk通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件,文件的展示 ...
- Android 反编译 -smali语法
前言 前面我们有说过android反编译的工具,如何进行反编译.反编译后可以得到jar或者得到smali文件.Android采用的是java语言 进行开发,但是Android系统有自己的虚拟机Dalv ...
- Android逆向之smali语法宝典
0x01.前言 Android采用的是java语言进行开发,但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class,而是使用的smali.我们反编译得到的代码,j ...
- apk反汇编之smali语法
类型 Dalvik的字节码中拥有两个主要的类型:基类和引用类型.引用类型 引用类型是对象和数组,其他的一切都是基类 基类被一个简单的字符描述.我没有提出这些缩写词———他们实际以字符串的形式存储于 ...
- Oracle-4 - :超级适合初学者的入门级笔记:plsql,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器
初学者可以从查询到现在的pl/sql的内容都可以在我这里的笔记中找到,希望能帮到大家,视频资源在 资源, 我自己的全套笔记在 笔记 在pl/sql中可以继续使用的sql关键字有:update del ...
- smali语法详解
smali文件格式 每个smali文件都由若干条语句组成,所有的语句都遵循着一套语法规则.在smali 文件的头3 行描述了当前类的一些信息,格式如下: .class < 访问权限> [ ...
- (3)Smali系列学习之Smali语法详解
数据类型 Dalvik字节码只有两种格式:基本类型和引用类型.对象和数组属于引用类型 语法 含义 V void,只用于返回值类型 Z boolean B byte S short C char I i ...
随机推荐
- Android -- 开机启动无界面后台程序
简单的说,这是一个没有界面的后台运行的应用程序 而且,还有一功能:开机自启动,启动运行一个服务 程序结构非常简单,两个类,一个是service的扩展类,一个是BroadcastReceiver扩展类 ...
- c#中开发ActiveX的学习笔记【转】
http://www.cnblogs.com/yjmyzz/archive/2009/12/14/1623396.html 1.为什么要用ActiveX? 网页本身的功能是有限的,要想实现一些网页本身 ...
- 使用c#訪问Access数据库时,提示找不到可安装的 ISAM
使用c#訪问Access数据库时,提示找不到可安装的 ISAM.例如以下图: 代码例如以下: connectionString = "Provider=Microsoft.Jet.OLEDB ...
- 解决Gradle执行命令时报Could not determine the dependencies of task ':compileReleaseJava'.
Could not determine the dependencies of task ':compileReleaseJava'. > failed to find target andro ...
- Hibernate Restrictions QBC运算符
HQL运算符 QBC运算符 含义 = Restrictions.eq() 等于equal <> Restrictions.ne() 不等于not equal > Restrict ...
- angular 资源路径问题
1.templateUrl .component("noData",{ templateUrl:"components/noData.html" // 注意相对 ...
- XSS过滤
XSS过滤封装用法 封装到app01/form.py文件中进行验证 from django.forms import Form,widgets,fields class ArticleForm(For ...
- 一段经典的 Java 风格程序 ( 类,包 )
前言 本文给出一段经典的 Java 风格程序,请读者初步体会 Java 和 C++ 程序的不同. 第一步:编写一个类 // 将这个类打包至 testpackage 包中 package testpac ...
- 多项式相乘快速算法原理及相应C代码实现---用到fft
最近认真研究了一下算法导论里面的多项式乘法的快速计算问题,主要是用到了FFT,自己也实现了一下,总结如下. 1.多项式乘法 两个多项式相乘即为多项式乘法,例如:3*x^7+4*x^5+1*x^2+5与 ...
- Android Eclipse 导入 AS Gradle AAR 库手冊
序言 这是一篇半技术类文章.众所周知如今Google主推Android Studio开发工具.而Eclipse已经被闲置一阵子了,可是Eclipse项目却还有非常多没有迁移到AS中.而如今一些新的库都 ...