KM的博客.

iOS汇编基础

字数统计: 595阅读时长: 2 min
2018/12/02

iOS汇编基础

x86_64汇编

X84中原有8个32位通用寄存器%eax,%ebx,%ecx,%edx,%esi,%edi,%ebp,%esp,

X86_64中分别被扩展为64位,并且多了8个寄存器。因此X86_64的寄存器如下:

  • rax, eax, ax, ah, al;
  • rbx, ebx, bx, bh, bl;
  • rcx, ecx, cx, ch, cl;
  • rdx, edx, dx, dh, dl;
  • rsi, esi, si;
  • rdi, edi, di;
  • rbp, ebp;
  • rsp, esp;
  • r8-r15;

GCC中对这些寄存器的调用规则如下:

  • %rax 作为函数返回值使用。
  • %rsp 栈指针寄存器,指向栈顶
  • %rdi,%rsi,%rdx,%rcx,%r8,%r9 用作函数参数,依次对应第1参数,第2参数。。。
  • %rbx,%rbp,%r12,%r13,%14,%15 用作数据存储,遵循被调用者使用规则,简单说就是随便用,调用子函数之前要备份它,以防他被修改
  • %r10,%r11 用作数据存储,遵循调用者使用规则,简单说就是使用之前要先保存原值
img

ARM处理器架构

ARM

现在的智能手机

ARM指令集

  • armv7|armv7s|arm64都是ARM处理器的指令集
    • v7
      iPhone3GS、iPhone4、iPhone4S
    • v7s
      iPhone5、iPhone5C
    • arm64
      iPhone5S、iPhone6、iPhone6 Plus、iPhone6S、iPhone6S Plus
      iPhoneSE、iPhone7、iPhone7 Plus、iPhone8、iPhone8 Plus、iPhoneX
      iPad5、iPad Air、iPad Air2、iPad Pro、iPad Pro2
      iPad mini with Retina display、iPad mini3、iPad mini4
      iPod Touch6
  • i386|x86_64 是Mac处理器的指令集
1
2
3
4
5
模拟器32位处理器测试需要i386架构,
模拟器64位处理器测试需要x86_64架构,

真机32位处理器需要armv7,或者armv7s架构,
真机64位处理器需要arm64架构。

编译错误

真机编译错误: No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386)

模拟器上编译错误:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7s, VALID_ARCHS=armv7 armv6)

iOS汇编教程

来自公主号:高级页面仔

CATALOG
  1. 1. iOS汇编基础
    1. 1.1. x86_64汇编
    2. 1.2. ARM处理器架构
      1. 1.2.1. ARM
      2. 1.2.2. ARM指令集
      3. 1.2.3. 编译错误
    3. 1.3. iOS汇编教程