Swift-简单汇编指令、lldb常用指令

汇编语言的分类分为:8086汇编(16bit)、x86汇编(32bit)、x64汇编(64bit)、ARM汇编(嵌入式、移动设备)
x86、x64汇编根据编译器的不同,分为两种书写格式:Intel(windows派系)、AT&T(unix派系)
iOS开发中,最主要的汇编是:AT&T -> 模拟器、ARM -> 真机

常见的汇编指令

image.png

寄存器

有16个常用寄存器:
  • rax、rbx、 rcx、 rdx、 rsi、 rdi、 rbp、 rsp
  • r8、r9、 r10、 r11、 r12、r13、 r14、r15
寄存器的具体用途:
  • rax、rdx常作为函数返回值使用
  • rdi、rsi、 rdx、 rcx、 r8、r9等寄存 器常用于存放函数参数
  • rsp、rbp用于栈操作
  • rip作为指令指针(存储着CPU下一条要执行的指令的地址,一旦CPU读取一条指令, rip会自动指向下一 条指令(存储下一 条指令的地址))

lldb常用指令

  • 读取寄存器的值:
    register read/格式
    例:register read/x

  • 修改寄存器的值:
    register write 寄存器名称 数值
    例:register write rax 0

  • 读取内存中的值:
    x/数量-格式-字节大小 内存地址
    例:x/3xw 0x0000010

  • 修改内存中的值:
    memory write 内存地址 数值
    例:memory write 0x0000010 10

  • 格式:
    x是16进制,f是浮点,d是十进制

  • 字节大小:
    b – byte 1字节
    h – half word 2字节
    w – word 4字节
    g – giant word 8字节

  • expression 表达式 :
    可以简写:expr 表达式
    expression $rax
    例:expression $rax = 1

  • po 表达式 print 表达式 :
    po/x $rax
    例:po (int)$rax

  • thread step-over、next、n:
    单步运⾏行行,把子函数当做整体⼀一步执⾏行行(源码级别)

  • thread step-in、step、s:
    单步运⾏行行,遇到子函数会进⼊入子函数(源码级别)

  • thread step-inst-over、nexti、ni:
    单步运⾏行行,把子函数当做整体⼀一步执⾏行行(汇编级别)

  • thread step-inst、stepi、si:
    单步运⾏行行,遇到子函数会进⼊入子函数(汇编级别)

  • thread step-out、finish:
    直接执⾏行行完当前函数的所有代码,返回到上一个函数(遇到断点会卡住)

规律

内存地址格式为:0x4bdc(%rip),一般是全局变量,全局区(数据段)
内存地址格式为:-0x78(%rbp),一般是局部变量,栈空间
内存地址格式为:0x10(%rax),一般是堆空间

你可能感兴趣的:(Swift-简单汇编指令、lldb常用指令)