彙編總結


layout: post title: 彙編總結 date: 2019-06-27 18:32:24.000000000 +09:00 categories:html

  • 彙編

tags:git

  • 彙編

本文首發於 我的博客github

彙編語言的種類

  • 8086彙編(16bit)
  • x86彙編(32bit)
  • x64彙編(64bit)
  • ARM彙編(嵌入式、移動設備) p......

x8六、x64彙編根據編譯器的不一樣,有2種書寫格式

  • Intel:Windows派系
  • AT&T :Unix派系

做爲iOS開發工程師,最主要的彙編語言是

  • AT&T彙編 -> iOS模擬器
  • ARM彙編 -> iOS真機設備

常見的彙編指令

項目 AT&T Intel 說明
寄存器命名 %rax rax
操做數順序 movq %rax, %rdx mov rdx, rax 將rax的值賦值給rdx
常數\當即數 movq $0x10, %rax mov rax, 0x10 將0x10賦值給rax
內存賦值 movq $0xa, 0x1ff7(%rip) mov qword ptr [rip+0x1ff7], 0xa 將0xa賦值給地址爲rip + 0x1ff7的內存空間
取內存地址 leaq -0x18(%rbp), %rax lea rax, [rbp – 0x18] 將rbp – 0x18這個地址值賦值給rax
jmp指令 jmp *%rdx jmp rdx call和jmp寫法相似
操做數長度 leaw 0x10(%dx), %ax lea ax, [dx + 0x10]

操做數長度的說明

  • b = byte (8-bit)
  • s = short (16-bit integer or 32-bit floating point)
  • w = word (16-bit)
  • l = long (32-bit integer or 64-bit floating point)
  • q = quad (64 bit) t = ten bytes (80-bit floating point)

寄存器

有16個經常使用寄存器

  • rax、rbx、rcx 、rdx、rsi、rdi、rbp、rsp
  • r八、r九、r十、r十一、r十二、r1三、r1四、r15

寄存器的具體用途

  • rax常做爲函數返回值使用
  • rdi、rsi、rdx、rcx、r八、r9等寄存器經常使用於存放函數參數
  • rsp、rbp用於棧操做
  • rip做爲指令指針
    • 存儲着CPU下一條要執行的指令的地址
    • 一旦CPU讀取一條指令,rip會自動指向下一條指令(存儲下一條指令的地址)

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

lldb經常使用指令

  • 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),通常是堆空間

參考資料:express

從入門到精通Swift編程編程

更多資料,歡迎關注我的公衆號函數

相關文章
相關標籤/搜索