Arm64汇编:UBFX指令

996.icu LICENSE

  • 问题背景
  • 解决方法
  • 总结

阅读之前注意:

本文阅读建议用时:10min
本文阅读结构如下表:

项目下属项目测试用例数量
问题背景0
解决方法1
总结0

问题背景

复现一套加密算法时,遇到了UBFX指令。
IDA中显示情况如下:

UBFX            W14, W14, #2, #6

IDA使用Fn+F5操作得到伪代码如下:

((unsigned __int8)v8 >> 2)

其中v8就是w14,定义如下:

unsigned int v8; // w14

因为不太了解这条指令,所以也不知道解析的伪代码是不是正确的。

解决方法

IDA这样解析出来的伪代码是正确的。
先在armDeveloper搜索这条指令,知道了这是无符号位域提取指令。
有2种语法:

UBFX Wd, Wn, #lsb, #width ; 32-bit
UBFX Xd, Xn, #lsb, #width ; 64-bit

意思是:从Wn寄存器的第lsb位开始,提取width位到Wd寄存器,剩余高位用0填充。
下面分析我们的代码:

UBFX            W14, W14, #2, #6

可以知道是从W14寄存器的第2位开始,提取6位到W14寄存器,然后剩余高位用0填充。这不就是先把W14寄存器保留低8位(也就是先做unsigned __int8强制数据类型转换),然后整体右移2位?因此就是IDA解析出来的如下结果:

((unsigned __int8)v8 >> 2)

可以看出IDA确实挺智能的!

总结

Arm64汇编——UBFX指令的意思是从Wn寄存器的第lsb位开始,提取width位到Wd寄存器,剩余高位用0填充。在逆向过程中遇到这种指令,在armDeveloper网站搜索指令了解意思后,即可复现。

如果本文对你有帮助,不如请我一罐可乐吧 🎃
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值