安卓逆向之ARM指令机器码

介绍ARM机器码

首先我们来看一条ARM指令:
00001BD0 BEQ loc_1c04
如果说这条指令切换为16进制如何表示:
00001BD0 0B 00 00 0A
如果说这条指令切换为2进制如何表示:
0000 101 0 000000000000000000001011

是不是觉得特别神奇,那么小编是怎么来计算的呢,接下来就跟着小编一起来学习一下吧。
首先我们前面讲过一个ARM指令是32位的,格式是: {} {s} , {,}
这里B 的跳转指令可以拆分为这样的格式:

在这里插入图片描述
31-28位就是cond,这里的意思就是条件码。例如ne、eq等。
它们对应的机器码格式:
在这里插入图片描述
第二个就是25-27位了 这里由于是B指令101即可
第三个24位可以这样理解L我们前面也讲过 带有连接的如果是BL指 令对应的二进制操作数就是1 无条件跳转B指令就是0。
0-23位就是目标地址与该指令的相对偏移,这里如何计算的勒,我们需 要记住一个公式。

(目标跳转的地址-(当前这条指令的地址+8))/4
这里+8的原因就是因为arm指令有3级流水线的原因,/4是因为要做对 其处理
这里我们带入到一开始我们举例的arm指令来试试
00001BD0 BEQ loc_1c04
我们先利用上面讲的格式切换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值