无名商城论坛

搜索
查看: 336|回复: 0

[技术教程] smali语法(一)

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 14:01:33 | 显示全部楼层 |阅读模式
一.什么是Smali?
Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种dex格式文件的汇编器,反汇编器。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了.dex格式所有功能(注解,调试信息,线路信息等)

二.smali的语法
1.原始类型

B---byte
C---char
D---double
F---float
I---int
J---long
S---short
V---void
Z---boolean
[XXX---array
Lxxx/yyy---object
解析下最后两项,数组的表示方式是:

在基本类型前加上前中括号“[”,例如int数组和float数组分别表示为:[I、[F;
对象的表示则以L作为开头,格式LpackageName/objectName;(注意必须有个分号跟在最后),例如String对象在smali中为:Ljava/lang/String;,其中java/lang对应java.lang包,String就是定义在该包中的一个对象。
2.方法的定义

?格式:Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type

注意:参数和参数间没有任何分隔符,

1.hello()v

  就是void hello()

2.hello(lll)Z
  就是boolean hello(int,int,int)

3.hello(Z[l[lLjava/lang/String;J)Ljava/lang/String?

  就是String hello(boolean,int[],int[],String,long)

3.基本语法

.field private isFlag:z  定义变量
.method  方法
.parameter  方法参数
.prologue  方法开始
.line 123  此方法位于第123行
invoke-super  调用父函数
const/high16 ?v0, 0x7fo3  把0x7fo3赋值给v0
invoke-direct  调用函数
return-void  函数返回void
.end method  函数结束
new-instance  创建实例
iput-object  对象赋值
iget-object  调用对象
invoke-static  调用静态函数
4.条件跳转分支:

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

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

"if-lt?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-ltz?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_**

?文章来自:博客园-im.lhc
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表