android dex文件Dalvik指令到smali代码的解析

这两天看丰生强先生的《Android软件安全与逆向分析》,在4.3节的最后以如下指令:

7010  0400 0000

为例解释了如何将Dalvik指令解析成汇编代码。

要想看懂这段解释,得首先明白几个基本知识。

1. arm是小字节序的,也就是高位高地址,低位低地址

1.  当使用16进制显示hello.dex文件时,这条指令显示为7010  0400 0000

2. 解析指令的时候是以16bit为单位读取内容的,也就是每次读取16bit。读取第一个16bit的后,这16bit的内容以16进制打印为:1070,为什么是这样呢?因为按照字节流读取2字节(16bit)之后,10在高位,70在低位。

3. 指令位表示为:A|G|op BBBB F|E|D|C

A|G|op 高8bit表示A|G,低8bit表示op

因此这个指令的A为1,G为0,op为70

0400对应于BBBB,按照字节流读取0400,这个16bit的高8位为0,低8位为4,因此BBBB解析为4

0000对应于F|E|D|C,F = E =D =C = 0


在A=1的时候,op为70的指令格式为:

[A=1] op {vC}, kind@BBBB

70对应于invoke-direct

C值为0

BBBB为4,为kind@类型,kind@4表示DexMethodId为4的字符串

因此7010  0400 0000解析后的smali代码为:

invoke-direct {v0}, Ljava/lang/Object;.<init>:()v

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值