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
- 格式
- 字節大小
- b – byte 1字節
- h – half word 2字節
- w – word 4字節
- g – giant word 8字節
- expression 表達式
- 能夠簡寫:expr 表達式
- expression $rax
- expression $rax = 1
- po 表達式
- print 表達式
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編程編程
更多資料,歡迎關注我的公衆號函數