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 | √ | √ | × | × |