汇编语言

文章目录
  1. 1. 寄存器和内存
  2. 2. 编程语言的发展
  3. 3. 汇编语言的种类
  4. 4. 常见汇编
  5. 5. 寄存器
  6. 6. lldb常用指令
  7. 7. 规律

汇编语言pdf 学习记录

寄存器和内存

  1. 通常,CPU会先将内存中的数据存储到寄存器中,然后再对寄存器中的数据进行运算
  2. 假设对内存中的数据做加1处理

    • cpu首先会将内存空间的值放到rax中, movq 内存地址 %rax
    • 然后让寄存器和1相加, addq $0x1, %rax
    • 最后将值赋值给内存空间: movq %rax, 内存空间

编程语言的发展

  1. 机器语言 0,1 组成
  2. 汇编语言 assemble language 用符号代替了0,1 比机器语言便于阅读和记忆
  3. 高级语言

汇编语言的种类

  1. intel windows派系
  2. AT&T Unix派系

IOS开发者

  1. AT&T IOS模拟器
  2. ARM IOS真机

常见汇编

名称 AT&T汇编 说明
寄存器的名称 %rax
操作数顺序 movq %rax, %rdx 将rax的值赋值给rdx
常数立即数 movq $0x10, %rax 将0x10赋值给rax
内存赋值 movq $0ax, 0x1ff7(%rip) 将0xa赋值给地址未rip+ 0x1ff7 的内存空间
取值内存 leaq -0x18(%rbp), %rax 将rbp -0x18 这个地址赋值给rax
操作数长度 movl,movb,mobw b byte,s short 16bit,w word 16bit,l long 32 bit,q quad 64 bits

寄存器

有16个通用寄存器

  1. rax、rbx、rcx、rdx、rsi、rdi,rbp、rsp
  2. r8、r9 、r10、 r11、r12、r13、r14、r15

寄存器的具体用途

  1. rax、rdx常用作函数返回值使用
  2. rdi、rsi、rdx、rcx、r8、r9 等寄存器常用语存放函数的参数
  3. rbp、rsp 用于栈操作
  4. rip作为指令指针
    1. 存储着CPU下一条要执行的指令地址
    2. 一旦CPU读取一条指令,rip会自动指向下一条指令

lldb常用指令

  1. 读取寄存器的值 : register read/格式 register read/x
  2. 修改寄存器的值 register write 寄存器名称 数值 register wirte rax 0
  3. 读取内存中的值 x/数量 格式 字节大小 内存地址 —- x/3xw 0x1000000
  4. 修改内存中的值 memory write 内存地址 数值 —-memory write 0x00000 10

其中格式:

  1. x 是16进制
  2. f 浮点
  3. d 十进制

其中的字节大小

  1. b byte 1字节
  2. h half word 2字节
  3. w word 4字节
  4. g gaint word 8字节

断定指令

  1. thred step-over next n 单步运行,把子函数整体异步执行(源码级别)
  2. thrad step-in step s 单不运行,把子函数当做整体异步执行(汇编级别)
  3. threa step-ins-over nexti ni 单步运行,把子函数当做整体异步执行(汇编级别)
  4. thread step-inst、stepi、si 单步运行,遇到子函数进入子函数(汇编解包)
  5. thread step-out、finish 直接运行完当前函数的所有代码,返回到上一个函数,遇到断点卡住

规律

  1. 内存格式是0x1bc(%rip),一般是全局变量,全局区(数据段)
  2. 内存地址格式为-0x78(%rbp),一般是局部变量,栈空间
  3. 内存地址格式为:0x10(%rax), 一般是堆空间,因为mallc 返回的地址存储在rax中