01-匯編語言

1.程序的本質(zhì)

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


image.png

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ā)展

image.png

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.常見匯編指令

image.png

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),一般是堆空間

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容