基础知识之Smali(1)
(参照大佬文章做笔记)
前文-背景介绍
Smali是指安卓系统里的Java虚拟copy机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了.dex格式所有功能(注解,调试信息,线路信息等zhidao)。
Dalvik是Google公司自己设计用于Android平台的虚拟机。它支持.dex(即“Dalvik Executable”)格式的Java应用程序的运行。.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik虚拟机是基于寄存器架构的虚拟机。
so不同于java虚拟机JVM编译后生成的class文件,Android虚拟机Dalvik在执行在重新整合打包后生成的dex文件
.dex是专门为Android虚拟机Dalvik设计的压缩格式
dex文件反编译之后就是smali代码
其实说白了smali是一种语言,是Android虚拟机Dalvik的反编译语言
所以步入Android逆向工程的第一步就是了解Smali语法
数据类型

寄存器
Java中变量都是存放在内存中的,Android为了提高性能,变量都是存放在寄存器中的,寄存器为32位,可以支持任何类型。
寄存器分为如下两类:
1、本地寄存器
用v开头数字结尾的符号来表示,v0, v1, v2,...
2、参数寄存器
用p开头数字结尾的符号来表示,p0,p1,p2,...
注意:
在非static方法中,p0代指this,p1为方法的第一个参数。(因为需要一个寄存器保存this指针)
在static方法中,p0为方法的第一个参数。
(一个寄存器可以存储32位长度的类型比如int,两个寄存器存64位比如Long和double)

浙公网安备 33010602011771号