1.程序的本質(zhì)
1.軟件\程序的執(zhí)行過程

2.寄存器與內(nèi)存
CPU會先將內(nèi)存中的數(shù)據(jù)存儲到寄存器中,然后再對寄存器中的數(shù)據(jù)進(jìn)行運算
假設(shè)內(nèi)存中有塊紅色內(nèi)存空間的值是3,現(xiàn)在想把它的值加1,并將結(jié)果存儲到藍(lán)色內(nèi)存空間
1.CPU首先會將紅色內(nèi)存空間的值放到rax寄存器中:movq 紅色內(nèi)存空間, %rax然后讓rax寄存器與1相加:addq $0x1, %rax
2.最后將值賦值給內(nèi)存空間:movq %rax, 藍(lán)色內(nèi)存空間
image.png
3.編程語言的發(fā)展
1.機器語言 :由0和1組成
2.匯編語言(Assembly Language):用符號代替了0和1,比機器語言便于閱讀和記憶
3.高級語言: C\C++\Java\JavaScript\Python等,更接近人類自然語言
數(shù)據(jù)操作:將寄存器BX的內(nèi)容送入寄存器AX
1.機器語言:1000100111011000
2.匯編語言:movw %bx, %ax
3.高級語言:ax = bx;
4.編程語言的發(fā)展

1.匯編語言與機器語言一一對應(yīng),每一條機器指令都有與之對應(yīng)的匯編指令
2.匯編語言可以通過編譯得到機器語言,機器語言可以通過反匯編得到匯編語言
3.高級語言可以通過編譯得到匯編語言\機器語言,但匯編語言\機器語言幾乎不可能還原成高級語言
5.匯編語言的種類
匯編語言的種類:
8086匯編(16bit)
x86匯編(32bit)
x64匯編(64bit)
ARM匯編(嵌入式、移動設(shè)備) ......
x86、x64匯編根據(jù)編譯器的不同,有2種書寫格式
Intel:Windows派系
AT&T :Unix派系
iOS開發(fā)工程師,最主要的匯編語言是
AT&T匯編 -> iOS模擬器
ARM匯編 -> iOS真機設(shè)備
6.常見匯編指令

7.寄存器
有16個常用寄存器
prax、rbx、rcx 、rdx、rsi、rdi、rbp、rsp
r8、r9、r10、r11、r12、r13、r14、r15
寄存器的具體用途
1.rax、rdx常作為函數(shù)返回值使用
2.rdi、rsi、rdx、rcx、r8、r9等寄存器常用于存放函數(shù)參數(shù)
3.rsp、rbp用于棧操作
4.rip作為指令指針:
存儲著CPU下一條要執(zhí)行的指令的地址
一旦CPU讀取一條指令,rip會自動指向下一條指令(存儲下一條指令的地址)
8. lldb常用指令
1.讀取寄存器的值 : register read/格式
register read/x
2.修改寄存器的值: register write 寄存器名稱數(shù)值register write rax 0
3.讀取內(nèi)存中的值:x/數(shù)量-格式-字節(jié)大小 內(nèi)存地址x/3xw 0x0000010
4.修改內(nèi)存中的值 : memory write 內(nèi)存地址 數(shù)值pmemory write 0x0000010 10
5.格式 x是16進(jìn)制,f是浮點,d是十進(jìn)制
6.字節(jié)大小:
b – byte 1字節(jié)
h – half word 2字節(jié) pw – word 4字節(jié)
g – giant word 8字節(jié)
7.expression 表達(dá)式 p可以簡寫:expr 表達(dá)式
expression $rax cexpression $rax = 1
8.po 表達(dá)式
print 表達(dá)式po/x $rax 或 po (int)$rax
常用調(diào)試指令
單步運?,把子函數(shù)當(dāng)做整體一步執(zhí)?(源碼級別):thread step-over、next、n
單步運?,遇到子函數(shù)會進(jìn)?子函數(shù)(源碼級別): thread step-in、step、s
單步運?,把子函數(shù)當(dāng)做整體一步執(zhí)?(匯編級別):thread step-inst-over、nexti、ni
單步運?,遇到子函數(shù)會進(jìn)?子函數(shù)(匯編級別):thread step-inst、stepi、si
直接執(zhí)?完當(dāng)前函數(shù)的所有代碼,返回到上一個函數(shù)(遇到斷點會卡住):thread step-out、finish
內(nèi)存地址識別
內(nèi)存地址格式為:0x4bdc(%rip),一般是全局變量,全局區(qū)(數(shù)據(jù)段)
內(nèi)存地址格式為:-0x78(%rbp),一般是局部變量,棧空間
內(nèi)存地址格式為:0x10(%rax),一般是堆空間
