Dalvik字节码小记_const/4 const/16 基础

Android逆向分析很重要。

const/4 v1, 0x1 这里大家应该知道 v1=1。但是真真正正想过为什么?也许很多人都知道,这里是写给不知道的。

首先4代表4字节,那么就是4位的。所以呢 v1=0*4+1=1

const/16 v2, 0x10  这里的话,16字节,那么16位对吧。所以v2 = 1*16+0 = 16

const/16 v3, 0x28  16字节,16位。v3 = 2*16+8 = 40;

这里就解释完了。后面给点dalvik的实例吧。


.local 4                   //本地4个寄存器,也就是下面的v0,v1,v2,v3
const/4 v2, 0x1            //4字节常量   v2=1
const/16 v1, 0x10          //16字节常量  v1=16
:local v1, "length":I      //int length=v1
if-nez v1,:cond_1        //如果v1不等于0,这跳转至cond_1
:cond_0                    //cond_0标签
:goto_0                    //goto_0标签
return v2                  //返回v2的值
:cond_1                    //开始执行cond_1标签代码
const/4 v0,0x0             //4字节常量  v0=0
:local v0, "i":I           //int i=v0
:goto_1                    //开始执行goto_1标签代码
if-lt v0, v1, :cond_2      //如果v0小于v1,则跳转至cond_2
const/16 v3,0x28           //如果v0大于等于v1,则执行下面语句: 16字节常量v3=40
if-le v1,v3, :cond_0       //如果v1小于等于v3,则跳转至cond_0,即返回v2的值
const/4 v2, 0x0            //如果v1大于v3,则4字节常量v2=0
goto:goto_0                //跳转至goto_0,即返回v2的值
:cond_2                    //cond_2标签
xor-int/lit8 v1, v1, 0x3b  //将第二个v1寄存器中的值与0x3b(59)进行异或运算,得到的值赋值给第一个v1寄存器中
add-int/lit8 v0, v0, 0x1   //将第二个v0寄存器中的值加上0x1(1),所得的值放入第一个v0寄存器中
goto:goto_1                //跳转值goto_1标签

int v2 = 1;  
int v1 = 16;  
if (v1 != 0){  
   for (int v0 = 0; v0 < v1;){  
         v1 = v1 ^ 59;  
         v0++;  
    }  
    if (v1 > 40){  
        v2 = 0;  
    }  
 }  
return v2;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值