smali语言之const const/4 const/16 const/high16

数据的定义

分三大类

1
2
3
字符串类型数据
字节码数据
数值型数据

数值类型数据拆分

1
2
3
4
5
6
7
8
9
10
第一种 const开头 占用一个容器(寄存器) 32位/容器
const v0,30
* const/4 最大只允许存放4位数值(4个二进制位) 1 111 7
* const/16 最大值允许存放16位数值 第一位默认为符号位 所以计算后15位的数值
* const 32位 最大32位
* const/high16 v0,0xFF7f0000


第二种 const-wide 占用两个容器 64位
const-wide v0,30 #占用v0和v1

总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const-string  v0 , "hello"# 定义字符串 将字符串hello赋值给v0

const-class v0,LGoActivity; # 定义字节码对象 将GoActivity.class对象赋值给v0

# 以下数据定义高位默认为符号位
const/4 v0,0x2 # 定义一个容器 最大只允许存放半字节4位数据 取值范围为 -8 and 7
const/16 v0 , 0xABCD # 定义定义一个容器 最大只允许存放16位数据 比如short类型数据 取值范围为-32768~32767
const v0 , 0xA# 定义一个容器 最大只允许存放32位数据,比如int类型数据 将数字10赋值给v0 取值范围-2147483647~2147483647
const/high16 #定义一个容器 最大只允许存放高16位数值 比如0xFFFF0000末四位补0 存入高四位0XFFFF

# const-wide 占用两个寄存器vx和vx+1, 数值必须以L结尾 否则编译不通过
const-wide/16 # 定义两个相连容器 最大只允许存放16位数据
const-wide/32 # 定义两个相连容器 最大只允许存放32位数据
const-wide # 定义两个相连容器 最大只允许存放64位数据
const-wide/high16 # 定义两个相连容器 只允许存放高16位数据

详情参考:Android逆向开发之smali语言的学习

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%