Android smali语法

本文详细介绍了Android smali语法,包括数据类型、运算、类名、数组、类的定义、寄存器使用、注解以及创建数组等内容。smali是Dalvik虚拟机使用的汇编语言,与Java代码有相似之处,如数据类型的表示、类名的定义以及数组的声明。此外,文章还讲解了如何给寄存器赋值、进行值的判断以及使用移位指令等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

smali语法


本文由 Luzhuo 编写,转发请保留该信息.
原文: https://blog.youkuaiyun.com/Rozol/article/details/88368358


smali是什么, 官方的简介

smali/baksmali is an assembler/disassembler for the dex format used by dalvik, Android’s Java VM implementation. The syntax is loosely based on Jasmin’s/dedexer’s syntax, and supports the full functionality of the dex format (annotations, debug info, line info, etc.)
smali / baksmali是Android的Java VM实现dalvik使用的dex格式的汇编程序/反汇编程序。语法松散地基于Jasmin的/ dedexer的语法,并支持dex格式的全部功能(注释,调试信息,行信息等)

Java代码

public int show(String str){
   
    return 1;
}

smali代码

# virtual methods
.method public show(Ljava/lang/String;)I
    .locals 1
    .param p1, "str"    # Ljava/lang/String;

    .line 22
    const/4 v0, 0x1

    return v0
.end method

数据类型 / 对象 / 数组 的写法, 对于经常JNI开发的童鞋肯定非常熟悉, 没错, 跟javap生成签名类型是一样的.

数据类型

smali类型 java类型 Description
V void (用于返回类型) -
Z boolean 不同
B byte -
S short -
C char -
I int -
J long (64 bits) 不同
F float -
D double (64 bits) -

运算

smali

mul-int v0, p1, p2

add-int / add-long / add-float / add-double / add-int/lit16 / add-int/lit8

smali运算符 Description int long float double
add-int v0, p1, p2 v0 = p1 + p2
sub-int v0, p1, p2 v0 = p1 - p2
mul-int v0, p1, p2 v0 = p1 * p2
div-int v0, p1, p2 v0 = p1 / p2
rem-int v0, p1, p2 v0 = p1 % p2
and-int v0, p1, p2 v0 = p1 & p2 × ×
or-int v0, p1, p2 v0 = p1 │ p2 × ×
xor-int v0, p1, p2 v0 = p1 ^ p2 × ×
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值