这几天认真研读了一下dalvik字节码,因为这个是重点,对以后的Android逆向分析很重要。
我是学过汇编的,但是感觉还是不是太懂。这玩意也太乱了吧。然后我有些看不懂,就百度一阵,也没有结果。就自己研究了下下,把自己不懂的地方写出来。不对的地方,大家请指出。
我主要是集中在赋值哪里。我开始没弄懂,后来才明白过来。
const/4 v1, 0x1 这里大家应该知道 v1=1。但是真真正正想过为什么?也许很多人都知道,这里是写给不知道的。
首先4代表4字节,那么就是4位的。所以呢 v1=04+1=1
const/16 v2, 0x10 这里的话,16字节,那么16位对吧。所以v2 = 116+0 = 16
const/16 v3, 0x28 16字节,16位。v3 = 2*16+8 = 40;
这里就解释完了。后面给点dalvik的实例吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| .local 4 const/4 v2, 0x1 const/16 v1, 0x10 :local v1, "length":I if-nez v1,:cond_1 :cond_0 :goto_0 return v2 :cond_1 const/4 v0,0x0 :local v0, "i":I :goto_1 if-lt v0, v1, :cond_2 const/16 v3,0x28 if-le v1,v3, :cond_0 const/4 v2, 0x0 goto:goto_0 :cond_2 xor-int/lit8 v1, v1, 0x3b add-int/lit8 v0, v0, 0x1 goto:goto_1
|
翻译成java代码就是
1 2 3 4 5 6 7 8 9 10 11 12
| 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;
|
最后更新时间:
感谢观看