匯編基礎(chǔ)知識

軟件/程序的執(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ù)(遇到斷點會卡住)
?著作權(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)容

  • 本人有若干成套學(xué)習(xí)視頻, 可試看! 可試看! 可試看, 重要的事情說三遍 包含Java, 數(shù)據(jù)結(jié)構(gòu)與算法, iOS...
    小冰山口閱讀 1,093評論 0 1
  • 工作中經(jīng)常會遇到需要使用匯編知識來解決的問題,比如查找崩潰堆棧定位在一些未提供源碼的第三方庫的崩潰原因等,但是由于...
    離原春草閱讀 783評論 0 5
  • 匯編語言的發(fā)展 機器語言 由0和1組成的機器指令. 加:0100 0000 減:0100 1000 乘:1111 ...
    CoderLWG閱讀 1,720評論 2 0
  • 0x01 簡介 這里開始熟悉匯編的指令格式 下圖為X86版本的指令格式,X64的指令格式和X86差不多后面有需要的...
    暴走竹竿閱讀 1,365評論 0 0
  • 概述 本文來介紹最基礎(chǔ)的8086匯編,將通過關(guān)鍵點的突出以及個人理解,而不會將原理做重點介紹,爭取最快的速度來學(xué)會...
    碼無不至閱讀 1,840評論 0 2

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