ARM 指令笔记

thumb BL指令计算

$s = 0x0019940A
$d = 0x0018D7C4
$offset = ($d-$s-4)/2
$low = $offset << (64-11) >> (64-11)
$hi = $offset << (64-22) >> (64-11)
$c1 = $hi + 0xF000
$c2 = $low + 0xF800
$code = $c1 | ($c2<<16)

例子

.text:0019940A F4 F7 DB F9                    BL      GetStrFromInt
.text:0018D7C4                                EXPORT GetStrFromInt

用公式计算得到

$s = 0x0019940A
0x0019940A
$d = 0x0018D7C4
0x0018D7C4
$offset = ( $d - $s - 4 ) / 2
$offset = ( 0xFFFF43BA - 4 ) / 2
$offset = 0xFFFF43B6 / 2
$offset = 0xFFFFA1DB
0xFFFFA1DB
$low = $offset << ( 64 - 11 ) >> ( 64 - 11 )
$low = $offset << 53 >> ( 64 - 11 )
$low = $offset << 53 >> 53
$low = 0x00000000 >> 53
$low = 0x000001DB
0x000001DB
$hi = $offset << ( 64 - 22 ) >> ( 64 - 11 )
$hi = $offset << 42 >> ( 64 - 11 )
$hi = $offset << 42 >> 53
$hi = 0x00000000 >> 53
$hi = 0x000007F4
0x000007F4
$c1 = $hi + 0x0000F000
$c1 = 0x0000F7F4
0x0000F7F4
$c2 = $low + 0x0000F800
$c2 = 0x0000F9DB
0x0000F9DB
$code = $c1 | ( $c2 << 16 )
$code = $c1 | 0xF9DB0000
$code = 0xF9DBF7F4
0xF9DBF7F4


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值