ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Dalvik字节码和Smali基本语法

2022-05-16 13:32:17  阅读:175  来源: 互联网

标签:vA vB 字节 Dalvik --- cond 跳转 Smali


什么是Dalvik字节码

Dalvik是Google专门为Android设计的一个虚拟机。
Dalvik VM是基于寄存器的,而JVM是基于栈的,Dalvik有专属的文件执行格式dex(Dalvik executable),jvm使用的是java字节码。
Dalvik VM你jvm速度更快,占用空间更少。

什么是Smali

Smali,baksmali分贝时指安卓系统里的java虚拟机(Dalvik)所使用的一种。dex格式文件的汇编器,反汇编器。
语法为一行宽松的Jasmin/dedeser语法,且实现了.dex格式的所用功能(注解,调试信息,线路信息等)。
对apk文件进行反汇编后,便会生成此类文件。其中在Dalvik字节码中,寄存器都是32位的,能够支持任何类型,64位类型(Long/Double)用2个寄存器表示。
Dalvik字节码有两种类型:原始类型,引用类型。

原始类型:  
B --- byte
C --- char
D --- double
F --- float
I --- int
J --- long
S --- short
V --- void
Z --- boolean

[XXX --- array  //数组表示方式:基本类型前加上“[”,
eg:int型数组表示为:[I


LXXX/yyy --- object  //对象表示以L开头,格式为LpackageName/objectName;(分号必须有)
//eg:String在Smali中为:LJava/lang.String; ,其中java/lang对应java.lang包,String就是定义在该包中的一个对象。


//内部类表示为:LpackName/objectNamesubObjectName;。即在内部类前面加“subObjectName;。即在内部类前面加“”符号。
方法定义:Func-Name(para-Type1para-Type2para-Type3...)Return-Type  //参数之间没有空格

eg:hello()v    //void hello()

hello(III)Z    //boolean hello(int,int,int)

hello(Z[I[ILjava/lang/String;J)Ljava/lang/String    //String hello(boolean,int[],int[],String,long)

Smali基本语法


.field private isFlag:z  定义变量

.method       方法

.parameter     方法参数

.prologue      方法开始

.line 123     此方法位于第123行

invoke-super   调用父函数

const/high16 vO, 0x7fo3   把0x7fo3赋值给v0

invoke-direct   调用函数

return-void   函数返回void

.end method   函数结束

new-instance   创建实例

iput-object   对象赋值

iget-object   调用对象

invoke-static   调用静态函数

条件跳转分支:
"if-eq vA, vB, :con_**"   如果vA等于vB则跳转到:cond_ **

"if-ne vA, vB, :cond_**"    如果vA不等于vB则跳转到:cond_ **

"if-It vA, vB, :cond_**"    如果vA小于vB则跳转 到:cond_ **

"if-ge vA, vB, :cond_**"     如果vA大于等于vB则跳转到:cond_ **

"if-gt vA, vB, :cond_**"    如果vA大于vB则跳转到:cond_ **

"if-le vA, vB, :cond_ *"     如果vA小于等于vB则跳转到:cond_ **

"if-eqz vA, :cond_**"    如果vA等于0则跳转到:cond_ **

"if-nez vA, :cond_**"    如果vA不等于0则跳转到:cond_ **

"if-Itz vA, :cond_**"    如果vA小于0则跳转到:cond_**

"if-gez vA, :cond_**"   如果vA大于等 于0则跳转到:cond_ **

"if-gtz vA, :cond_**"     如果vA大于0则跳转到:cond_ **

"if-lez vA, :cond_**"    如果vA小于 等于0则跳转到:cond ** 

标签:vA,vB,字节,Dalvik,---,cond,跳转,Smali
来源: https://www.cnblogs.com/gqv2009/p/16276641.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有