•HI : (unsigned Higher) 无符号比较,大于 (C = 1 & Z = 0)
•LS: (unsigned Lower or Same) 无符号比较,小于等于 (C = 0 & Z = 1)
•GE: (signed Greater than or Equal) 有符号比较,大于等于 (N = V)
•LT: (signed Less Than) 有符号比较,小于 (N != V)
•GT: (signed Greater Than) 有符号比较,大于 (Z = 0 & N = V)
•LE: (signed Less Than or Equal) 有符号比较,小于等于 (Z = 1 | N != V)
•AL: (Always) 无条件,默认值
•NV: (Never) 从不执行
6. 移位操作(LSL、ASL、LSR、ASR、ROR、RRX)
移位操作在ARM指令集中不作为单独的命令使用,它在指令格式中是一个字段。接下来将会介绍一下各种移位操作。如果你之前学过“数字电路”这门课的话,那么你肯定对这些移位操作并不陌生。
(1)、LSL ---- 逻辑左移(Logical Shift Left)与 ASL ---- 算术左移 (Arithmetic Shift Left)
逻辑左移与算术左移的操作是一样的,都是将操作数向左移位,低位补零,移除的高位进行丢弃。接下来我们来看一个示例,根据这个示例来看一下LSL或者ASL的工作方式。
MOV R0, #5
MOV R1, R0, LSL #2
上述命令,就是将5存储到R0寄存器上(R0 = 5), 然后将R0逻辑左移2位后传送到R1寄存器中。十进制5的二进制数值是0101,进行逻辑左移2位就是0001_0100, 也就是十进制中的20。其实没逻辑左移1位就相当于原数值进行乘2操作,5逻辑左移2位其实就是5 x 2^2 = 20。下方是该操作的原理图

(2)、LSR ---- 逻辑右移(Logical Shift Right)
逻辑右移与逻辑左移是相对的,逻辑右移其实就是往右移位,左边补零。用法与LSL类似,在此就不做过多赘述了。
(3)、ASR ---- 算术右移(Arithmetic Shift Right)
ASR与LSR类似,唯一不同的是,LSR的高位补零,而ASR的高位补符号位。符号位为1,那么就补1,符号位为0那么就补零。
(4)、ROR ---- 循环右移(Rotate Right)
循环右移,见名知意,就是循环着往右移动,右边移除的位往高位进行填补。
以上所述是小编给大家介绍的iOS逆向工程之Hopper中的ARM指令详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ASPKU网站的支持!
注:相关教程知识阅读请移步到IOS开发频道。










