Arm64汇编:UBFX指令
Arm64汇编——UBFX指令的意思是从Wn寄存器的第lsb位开始,提取width位到Wd寄存器,剩余高位用0填充。在逆向过程中遇到这种指令,在armDeveloper网站搜索指令了解意思后,即可复现。
·
- 问题背景
- 解决方法
- 总结
阅读之前注意:
本文阅读建议用时: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网站搜索指令了解意思后,即可复现。
如果本文对你有帮助,不如请我一罐可乐吧 🎃
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献3条内容
所有评论(0)