
軟件/程序的執(zhí)行過程
通常,cpu 會先將內(nèi)存中的數(shù)據(jù)存儲到寄存器中,然后在對寄存器中的數(shù)據(jù)進(jìn)行運算。
假設(shè)內(nèi)存中有快紅色內(nèi)存空間的值是3,現(xiàn)在想把它的值加1,并將結(jié)果存儲到藍(lán)色的內(nèi)存空間
- cpu 首先會將紅色內(nèi)存空間的值放到 rax 寄存器中:
movq 紅色內(nèi)存空間, %rax - 然后讓 rax 寄存器與1相加:
addq $0x1 %rax - 最后將值賦值給內(nèi)存空間:
movq %rax,藍(lán)色內(nèi)存空間
匯編
- 反匯編: Debug -- Debug Workflow -- Always Show Disassembly
- 內(nèi)存視圖: Debug -- Debug Workflow -- View Memery
規(guī)律
內(nèi)存地址格式為:0x4bdc(%rip) 一般是全局變量,全局區(qū)(數(shù)據(jù)段)
內(nèi)存地址格式為:-0x78(%rbp) 一般是局部變量,??臻g
內(nèi)存地址格式為:0x10(%rax) 一般是堆空間
r開頭 x64 64bit:rax
e開頭 x86 32bit:eax
ah:8bit
匯編語言種類
作為iOS開發(fā)工程師,最主要的匯編語言是:AT&T匯編(iOS模擬器)、ARM匯編(ios真機)
- 8086匯編(16bit)
- x86匯編(32bit)
- x64匯編(64bit)
- ARM匯編(嵌入式、移動設(shè)備)
x86、x64匯編根據(jù)編譯器的不同,有2種書寫格式
- Inter: Windows派系
- AT&T:Unix派系
常見匯編指令

寄存器
有 16個常用寄存器:
rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15
寄存器的具體用途:
- rax、rdx 常作為函數(shù)返回值使用
- rdi、rsi、rdx、rcx、r8、r9等寄存器常用于存放函數(shù)參數(shù)
- rsp、rbp 用于棧操作
- rip 作為指令指針
存儲著 cpu下一條要執(zhí)行的指令的地址
一旦 cpu 讀取一條指令,rip會自動指向下一條指令(存儲下一條指令的地址)
x64 向下兼容:ah al 在 eax中、這些都在 rax中,下面也如此。

LLDB 常用指令

- thread step-over、next、n
- 單步運行,把子函數(shù)當(dāng)做整體一步執(zhí)行(源碼級別)
- thread step-in、step、s
- 單步運行,遇到子函數(shù)會進(jìn)入(源碼級別)
- thread step-inst-over、nexti、ni
- 單步運行,把子函數(shù)當(dāng)做整體一步執(zhí)行(匯編級別)
- thread step-inst、stepi、si
- 單步運行,遇到子函數(shù)會進(jìn)入(匯編級別)
- thread step-out、finish
- 直接執(zhí)行完當(dāng)前函數(shù)的所有代碼,返回上一個函數(shù)(遇到斷點會卡住)