swift汇编分析

本文详细阐述了软件程序的执行流程,从硬盘加载到内存,再到CPU的指令执行。介绍了CPU内部的寄存器和运算器如何处理信息,并通过实例说明了汇编语言中如何对内存数据进行操作。同时,讲解了汇编语言的基本指令和lldb调试工具的使用,包括单步执行、读写内存等关键指令。
摘要由CSDN通过智能技术生成

程序的本质

  • 软件/程序的执行过程
    1.程序/软件放在硬盘上
    2.双击/打开软件就会装载到内存中 (0101的机器码就会装载到内存中,内存中放的就是机器指令010101)
    3.内存指令就会交给CPU去执行,CPU会读取内存中的机器指令,CPU也会写一些数据到内存中
    4.CPU一旦读取了机器指令后,理解了要干什么后,就会控制计算机的其他语言部件,如显示器,音响,话筒,其他设备等
    在这里插入图片描述

  • CPU内部
    1.寄存器 —> 信息存储
    2.运算器 —> 信息处理
    3.控制器

  • 寄存器和内存
    1.通常,CPU会先将内存中的数据存储到寄存器中,然后再对寄存器中的数据进行运算 : (先将内存中的数据拉到寄存器来,再进行计算)

假设内存中有块红色内存空间的值是3,现在想把它的值加1,并将结果存储到蓝色内存空间
CPU首先会将红色内存空间的值放到rax寄存器中: movq 红色内存空间, %rax
然后让rax寄存器与1相加: add $0x1, %rax
最后将值赋值给内存空间: movq %rax, 蓝色内存空间
tips:
movq : 就是将左边的东西送到右边

let a = 3
let b = a + 1

在这里插入图片描述

在这里插入图片描述

汇编语言的发展

在这里插入图片描述

汇编语言的种类

在这里插入图片描述

常见汇编指令

在这里插入图片描述

tips
0x1ff7(%rip) : 寄存器+ 0x1ff7的内存地址对应的存储空间
凡是看到小括号,就是代表里面存的是内存地址
//(%rbp) -0x18: 寄存器里面存的地址值 - 0x18
movq -0x18(%rbp),%rax : -0x18(%rbp)的内存地址的存储空间里面的数据赋值给rax
相当于房间里面的人赋值给rax : movq 赋值数据
leaq -0x18(%rbp),%rax : -0x18(%rbp)的地址值赋值给rax
相当于房间的地址赋值给rax : leaq 赋值地址


r开头: 64bit, 8个字节
e开头: 32bit, 4个字节
ax,bx,cx: 16bit, 2个字节
ah,al,bh,bl: 8bit, 1个字节

lldb常用指令1

  • 读取寄存器的值
    register read/格式
    register read/x
  • 修改寄存器的值
    register write 寄存器名称 数值
    register write rax 0
  • 读取内存中的值
    x/数量-格式-字节大小 内存地址
  • 修改内存中的值
    memory write 内存地址 数值
    memory write 0x0000010 10
  • po 表达式
    print 表达式
    po/x $rax

格式
如x/3xw 0x00000000000321
3表示显示三组数据
x是16进制,是浮点 , d是十进制
字节大小有:
b - byte 1字节
h - half word 2字节
w - word 4字节
g - giant word 8字节

lldb常用指令2

  • 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
    直接执行完当前函数的所有代码,返回到上一个函数(遇到断点会卡住)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值