第七章 ARM 反汇编基础(一)(Android 与 ARM 处理器)

文章目录

  • ARM 反汇编基础
    • Android 与 ARM 处理器
      • ARM 处理器架构概述
        • Cortex
      • Android 支持的处理器架构

ARM 反汇编基础

  • 学习目的:掌握原生程序逆向技术

Android 与 ARM 处理器

ARM 处理器架构概述

  • ARM:Advanced RISC Machine
    • 一家嵌入式处理器提供商
    • 一种处理器架构
    • 一套完整的处理器指令集
  • 为满足不同环境需求,ARM 公司推出了多种基于通用架构的处理器,分为 Classic、Embedded、Application 三大类
  • Classic:经典系列,早先基于 ARM 架构的处理器以数字命名,此命名方式从 ARM1 延续到 ARM11
  • ARM11 后不再采用数字命名处理器的版本,开始采用“Cortex”命名

Cortex

  • Cortex 处理器分为三个系列:Cortex-A、Cortex-M、Cortex-R
  • Cortex-A:广发应用于智能手机、上网本、电子书、数字电视等常见电子设备。属于 ARMv7-A 架构,Android 和其他主流手机系统大都使用它。市场上大部分使用 32 位 CPU 的 Android 手机采用的处理器都是 Cortex-A15 和 Cortex-A17
  • ARMv8
    • 2011 年 11 月发布的新一代处理器架构
    • 第一款使用 ARMv8-A 架构的 ARM 内核是 Cortex-A32,仍是 32 位 CPU
    • 从 Cortex-A35 起,所有 CPU 都是 64 位
    • 目前主流的 Android 手机都配置了八核的 64 位 ARM 处理器

Android 支持的处理器架构

  • Android 平台对处理器架构的支持,可通过 Android NDK 对处理器的支持来了解
  • Android 系统支持 armeabi、armeabiv7-a、arm64-v8a、x86、x86-64、MIPS 等多种架构的处理器
  • x86/x86-64 与 MIPS 系统的处理器在 Android 设备上占用率较低,故只讨论与 ARM 相关的部分
  • Android 对 ARM 支持的调整与 ARM 的几次架构调整在时间上对应
  • ARM 芯片经历的几次大规模架构调整:
    • ARMv5TE:兼容 ARMv4 使用的 32 位 ARM 指令集,以及 ARMv4T 增加的 16 位 Thumb 指令集,支持在 ARM 和 Thumb 模式间切换
    • ARMv6:对内存访问的架构有所调整,支持 SIMD 指令,增加可选的 Thumb-2 指令集
    • ARMv7-A:将 ARMv6 时代可选的 Thumb-2 指令集变成必选项,支持 NEON 指令,代表芯片有 Cortex-A8/A9/A15/A17
    • ARMv8-A:支持 64 位的 AArch64 和 AArch32 两种架构,其中,AArch32 和 ARMv7-A 架构基本一样,AArch64 是全新的 64 位架构
  • 整个 ARM 架构的变化过程如图:
    第七章 ARM 反汇编基础(一)(Android 与 ARM 处理器)_第1张图片
  • Android 系统从 1.5 版本开始,正式加入 Android NDK 的开发支持,发布了 Android NDK 1.0(首个发布版本只支持 ARM 处理器)
  • Android 1.6 发布时发布了 Android NDK 2.0
  • 查看 Android 源码的 dalvik/vm/mterp 目录可发现:
    • Android 1.6 只支持 ARMv4 和 ARMv5TE 指令集
    • Android 2.0 增加了对 ARM VFP、ARMv6、ARMv6T2 指令集的支持,Android NDK 指定的 armeabi 指令集实际上对应的是 ARMv6 之前所支持的指令集
    • Android 2.2 增加了对 ARMv7-A 指令集的支持,而其所对应的是 Android NDK 指定的 armeabiv7-a 指令集
    • 之后一直到 Android 4.4 发布的这段时间里,ARM 平台只支持 armeabi 和 armeabiv7-a 两种架构
    • 查看 Android 4.0 以后版本的源码,可从底层的设备驱动与上层的开发规范中发现:Android 支持 64 位架构的 ARM 处理器,但当时无论是 Dalvik 虚拟机还是 ART 虚拟机,都只支持 32 位的代码
    • Android 5.0 时代,ART 虚拟机取代 Dalvik 虚拟机,支持 64 位程序运行,Android NDK 正式增加了对 arm64-v8a 指令集的支持,该指令集对应的就是 ARMv8-A 处理器架构

你可能感兴趣的:(《Android,软件安全权威指南》学习笔记,android,安全)