常見的匯編指令、寄存器、lldb指令

匯編語言的種類:

  • 1.8086匯編(16bit)
    2.x86匯編 (32bit)
    3.x64匯編 (64bit)
    4.ARM匯編 (嵌入式 移動設(shè)備)

常見的匯編指令

項目 AT&T- Intel 說明
寄存器命名 %rax rax
操作數(shù)順序 movq %rax,%rdx mov rdx,rax 將 rax的值賦值給 rdx
常數(shù)/立即數(shù) movq \$3,%rax
movq $0x10,%rax
mov rax,3
mov rax,0x10
將3賦值給rax
將10賦值給rax
內(nèi)存賦值 movq 0xa,0x1ff7(%rip) mov qword ptr[rip+0x1ff7],0xa 將 0xa賦值給地址為 rip+0x1ff7 的內(nèi)存
取內(nèi)存地址 movq -0x18(%rbp),%rax lea rax,[rbp - 0x18] 將 rep - 0x18 這個地址值賦值給 rax
jmp指令 jmp *%rdx
jmp 0x40001002
jmp *(%rax)
jmp rdx
jmp 0x40001002
jmp [rax]
call和jmp寫法類似
操作數(shù)長度 movl %eax,%edx
movb $0x10,%al
leaw 0x10(%dx),%ax
mov edx,eax
mov al,0x10
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 pint)
q = quad(64-bit)
t = ten bytes(80-bit floating pint)

寄存器

  1. 16個常用寄存器
    %rax 、%rbx、%rcx、%rdx、%rsi、%rdi、%rbp、%rsp
    %r8、%r9、%r10、%r11、%r12、%r13、%r14、%r15

2.寄存器的具體用途
%rax 常作為函數(shù)返回值使用
%rdi 、%rsi 、%rdx 、% rcx 、%r8 、%r9等寄存器常用于存放函數(shù)參數(shù)
%rsp 、%rbp 用于棧操作

lldb常用指令

  • 讀取寄存器的值
    register read/格式
    register read/x

  • 修改寄存器的值
    register write 寄存器名稱 數(shù)值
    register write rax 0

  • 讀取內(nèi)存中的值
    x/數(shù)量-格式-字節(jié)大小 內(nèi)存地址
    x/3xw 0x0000010

  • 修改內(nèi)存中的值
    memory write 內(nèi)存地址 數(shù)值
    memory write 0x00000010 10

  • 格式
    x 是16進制,f 是浮點,d 是十進制

  • 字節(jié)大小

b - byte 1字節(jié)
h - half word 2字節(jié)
w - word 4字節(jié)
g - giant word 8字節(jié)
  • expression 表達(dá)式
    可以簡寫:expr 表達(dá)式
    expression $rax
    expression $rax = 1

  • po表達(dá)式
    print 表達(dá)式
    po/x $rax
    po (int)$rax

  • 單步運行,把子函數(shù)當(dāng)作整體一步執(zhí)行(源碼級別
    thread step-over、 next、 n

  • 單步運行,遇到子函數(shù)會進入子函數(shù)(源碼級別
    thread step-in、step、s

  • 單步運行,把子函數(shù)當(dāng)作整體一步執(zhí)行(匯編級別
    thread step-inst-over、 nexti、 ni

  • 單步運行,遇到子函數(shù)會進入子函數(shù)(匯編級別
    thread step-inst、stepi、si

  • 直接執(zhí)行晚當(dāng)前函數(shù)的所有代碼,返回到上一個函數(shù)(遇到斷點會卡?。?br> thread step-out 、 finish

內(nèi)存地址格式為: 0x4bdc(%rip),一般是 全局變量,全局區(qū)(數(shù)據(jù)段)
內(nèi)存地址格式為: -0x78(%rbp),一般是 局部變量??臻g
內(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)容

  • 作者: Liwx 郵箱: 1032282633@qq.com 源碼: 需要源碼的同學(xué), 可以在評論區(qū)留下您的郵箱 ...
    Liwx閱讀 2,240評論 1 12
  • 本人有若干成套學(xué)習(xí)視頻, 可試看! 可試看! 可試看, 重要的事情說三遍 包含Java, 數(shù)據(jù)結(jié)構(gòu)與算法, iOS...
    小冰山口閱讀 1,093評論 0 1
  • 為了表示我對簡書『飽醉豚』事件的不滿,簡書不再更新,后續(xù)有文章只更新 個人博客和 掘金 歡迎移步 個人博客或者 掘...
    eagleyz閱讀 2,037評論 0 0
  • AT&T匯編與Xcode LLDB調(diào)試 寄存器 模擬器 通用寄存器 64位寄存器32位寄存器(低32位)16位寄存...
    迷路的小小閱讀 1,343評論 0 0
  • 一. 程序的本質(zhì) 軟件\程序的執(zhí)行過程 當(dāng)軟件\程序運行的時候會先把軟件\程序的數(shù)據(jù)裝載進內(nèi)存,然后CPU再從內(nèi)存...
    Imkata閱讀 2,803評論 0 5

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