安卓逆向中遇到的坑坑们

坑一 偏移计算

armv7 armv9下的流水线机制。流水线使用三个阶段,因此指令分为三个阶段执行:
1.取指(从存储器装载一条指令);
2.译码(识别将要被执行的指令);
3.执行(处理指令并将结果写回寄存器)。
而R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。
当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位置+8;当thumb状态时每条指令为2字节长度,所以PC指向该指令地址加4字节的地址。

坑二 thumb指令换算

做的最苦逼的事情就是对照一份长达七百页的官方指令手册进行汇编到16位机器码的换算,需要修改一个指令,要先找到指令对应的描述文档,然后按照二进制换算成十六进制,然后修改掉指令。好苦啊。当时尝试搜索对应的转换工具却未果,后来发现一个神站解决我的难言之隐。
http://armconverter.com/

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入我的圈子多多交流,共同进步,具体看我的个人介绍,我们一起学技术!
朋友圈,点赞是表态,评论才是真爱;在公众号,点赞只是认同,赞赏才是死忠;在,阅读只是眼动,喜欢才是心动。


安卓逆向中遇到的坑坑们_第1张图片
图片发自App

你可能感兴趣的:(安卓逆向中遇到的坑坑们)