IOS开发swift笔记01-汇编

1、程序运行的本质:

程序运行时将存在硬盘中的软件装载进内存,计算机的CPU可读写内存,通过读写内存信息处理控制计算机的显示器、音响、话筒、其他设备。
CPU:主要由寄存器、运算器、控制器组成。寄存器负责对正在运行程序的数据存储。运算器负责信息处理,控制器控制计算机做出相应的响应。

2、寄存器与内存

一般CPU会将内存的数据存储到寄存器中,然后在对寄存器中的数据进行运算。
例如:内存中有一块a内存存储的值是2,现在想把他的值加1。
CPU会将a内存的值存储到CPU的RAX寄存器中:movq a, %rax
然后RAX寄存器与1相加:addq $0x1, %rax
最后在讲值给a内存空间:movq %rax, a

3、程序运行到计算机

高级语言——(编译)——>汇编语言<——(编译)——>机器语言——(运行)——>计算机
a、汇编语言与机器语言一一对应,每一条机器指令都有一条与之对应的汇编指令。
b、汇编语言可以编译成机器语言,机器语言可以反编译成汇编语言。
c、高级语言可以编译成汇编语言/机器语言,但是汇编语言/机器语言几乎不可能还原成高级语言。

4、汇编语言种类

8086汇编(16bit)
x86汇编(32bit)
x64汇编(64bit)
ARM汇编(嵌入式、移动设备组)

X86、x64汇编根据编译的不同有两种书写格式
Intel:windows派
AT&T:Unix派

IOS开发汇编
AT&T汇编:模拟器
ARM汇编:真机调试

5、常见的汇编指令

常见的汇编指令,周饰宇 movx
其中 x 可以是下面的字符:
1、l用于32位的长字值
2、w用于16位的字值
3、b用于8位的字节值

实例:
movl %eax, %ebx #把32位的EAX寄存器值传送给32为的EBX寄存器值
movw %ax, %bx
movb %al, %lx

6、寄存器

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会自动只想下一条指令(存储下一条指令的地址)
寄存器 CSDN--SYr开头:64bit,8字节
e开头:32bit,4字节
ax,bx,cx:16bit,2字节
ah al bh bl:8bit,1字节

7、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),一般是堆空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SY.ZHOU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值