linux lib.a反编译,android反编译-smali文件语法

原始类型

V void (只能用于返回值类型)

Z boolean

B byte

[B byte array

S short

C char

I int

J long

F float

D Double

寄存器与变量

java中变量都是存放在内存中的,android为了提高性能,变量都是存放在寄存器中的,寄存器为32位,可以支持任何类型,其中/Long和double是64位的,需要使用两个寄存器保存。

寄存器采用v和p来命名

v表示本地寄存器

p表示参数寄存器,关系如下

如果一个方法有两个本地变量,有三个参数

v0 第一个本地寄存器

v1 第二个本地寄存器

v2 p0 (this)

v3 p1 第一个参数

v4 p2 第二个参数

v5 p3 第三个参数

当然,如果是静态方法的话就只有5个寄存器了,不需要存this了。

.registers

指定方法中寄存器的总数

.locals

指定表明方法中不是参数寄存器的总数,放在方法的第一行。

名词解释

寄存器

. 点开头

.local

A

add-int/lit8

用法:

const/16 v30, 0x0

invoke-virtual/range {v17 .. v17}, Ljava/lang/StringBuffer;->length()I

move-result v31

add-int/lit8 v31, v31, -0x1

invoke-virtual/range {v29 .. v31}, Ljava/lang/String;->substring(II)Ljava/lang/String;

move-result-object v16

定义v31 = 0

v17是某个字符串变量的长度,最终赋给v31

v31将自身-1,再赋给v31,像v31 = v31 - 1 或 v31 = v31 --

v29是一个字符串

截取v29的字符串,最终赋给v16,像这样 v16 = v29.substring(0, v17字符串长度 -1)

aput-object

aput-object v4, v2, v3

将v4加入v2的数组中,索引是v3

S

sput-object

将一个对象引用值赋给一个变量</

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值