• 入门 ARM 汇编(一)—— 知识铺垫


    我读着史铁生的散文,零碎的牵扯起我生命中不曾出现过的记忆,一如北方的黄山厚土之中悠忽而来的忧伤的信天游,那些灿若信仰一样的阳光以及阳光下虔诚的子民。我想有一次远行,于细碎流淌的时光与路途之中,观察所有遥不可及的生存方式,以及其中的人们。我发现我爱上了北方,中国的北方。满含苍凉的气息:那些皲裂而贫瘠的黄土地,干涸焦灼似静脉一般延伸的河床,那些皮肤黑皱似柏树老皮的农民...人与大地皆有着原始而朴素的容颜,映照着平凡的历史。—— 七堇年

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287

    ARM 汇编代码中几乎处处都在使用寄存器,寄存器是处理器特有的用来暂存指令、数据和地址的高速存储单元。比如,高级语言中的变量,到了汇编中,其值可能就保存在某个寄存器中。

     

    上述代码中的 R0、R2、SP 都是 ARM 寄存器。

    ARM 处理器共有 31 个通用寄存器和 6 个状态寄存器。不过,在某一处理器模式下都是使用其中的一部分,包括 15 个通用寄存器(R0 ~ R14),一个或两个状态寄存器(CPSR/SPSR)和程序计数器(PC/R15)。

    R0 ~ R14 又可分为两类,即:不分组寄存器(R0 ~ R7)和分组寄存器(R8 ~ R14)。所谓不分组,即该寄存器在各处理器模式下共用同一物理寄存器;所谓分组,即该寄存器在不同的处理器模式下,对应着不同的物理寄存器。

    这其中分组寄存器(R8 ~ R14)又可分为两类:(1)R8 ~ R12 有 2 组物理寄存器:1 组用于 FIQ 模式,另 1 组用于除 FIQ 以外的所有模式。(2)R13 ~ R14 有 6 组物理寄存器,1 组用于用户模式和系统模式,另 5 组分别用于 5 种异常模式。

    另外,R13 通常用作堆栈指针,称为 SP;R14 用作链接寄存器,称为 LR。CPSR 是当前程序状态寄存器,SPSR 是程序状态保存寄存器。当出现异常时,SPSR 用于保存 CPSR 的状态。

    最后,ARM 处理器采用 3 级流水线机制来加快指令处理速度。所以,PC 总是指向当前指令的下 2 条指令的地址,即当前指令地址值加上 8 个字节。

    ARM 处理器支持 7 种运行模式:

    •   用户模式 (usr)
    •   快速中断模式 (fiq)
    •   外部中断模式 (irq)
    •   管理模式 (svc)
    •   数据访问终止模式 (abt)
    •   系统模式 (sys)
    •   未定义指令中止模式 (und)

    除用户模式外,其他模式均为“特权”模式,处理器可以访问受保护的系统资源,而 ARM 程序逆向分析通常只涉及用户模式。在用户模式下,处理器可以访问 R0 ~ R14、PC (R15)、CPSR,没有 SPSR。

    ARM 处理器有两种工作状态:(1)ARM 状态:执行 32 位对齐的 ARM 指令;(2)Thumb 状态:执行 16 位对其的 Thumb 指令。

    两种状态下的寄存器命名有部分差异,下面只列出不同的部分:

    • Thumb 状态下的 FP 对应 ARM 状态下的 R11
    • Thumb 状态下的 IP 对应 ARM 状态下的 R12
    • Thumb 状态下的 SP 对应 ARM 状态下的 R13
    • Thumb 状态下的 LR 对应 ARM 状态下的 R14
    • Thumb 状态下的 PC 对应 ARM 状态下的 R15

    Android 平台的 ARM 汇编为 GNU ARM 汇编,使用 GAS (GNU Assembler,GNU 汇编器)。

    学习资料:【Android 软件安全与逆向分析】

  • 相关阅读:
    java 获取pdf内容
    超快的maven setting文件
    MQTT-CN MQTT协议中文版
    Another maybe monad library for ruby
    [Game-0001] 新手引导逻辑梳理
    [Erlang-0016][aque_tcp] 一个 Erlang TCP 组件
    [Erlang-0015][Lager] Erlang日志框架Lager简析
    LeetCode.1217-交换芯片(Play with Chips)
    LeetCode.1207-唯一的元素出现次数(Unique Number of Occurrences)
    LeetCode.1200-最小绝对值差(Minimum Absolute Difference)
  • 原文地址:https://www.cnblogs.com/ilocker/p/4626266.html
Copyright © 2020-2023  润新知