swift中暫存器相關內容

2021-10-02 23:47:35 字數 2585 閱讀 9404

(%rdi)位址所在的儲存空間

movq -0x18(%rbp), %rax

leaq -0x18(%rbp), %rax

movq是將rbp-0x18根據這個記憶體位址找到對應的記憶體空間,將記憶體空間的資料取出來賦給rax,所以rax裡面放的是記憶體空間對應的記憶體資料

leaq是 直接將rbp-0x18位址值賦值給rax,這個rax中放的是記憶體位址,((因為不支援movq %rbp-0x18, %rax這種操作))

movq $0x10(%rbp) %rip 做的是值傳遞

leaq專門做位址值傳遞的 將0x111a+rip的位址值傳給rdi

leaq 0x111a(%rip), %rdi

callq 0x100000f20 (函式位址,跳到這個位址執行完後通過retq又跳回去)

jump 0x100000f20 (跳到這個位址後不回頭)

暫存器有16個常用的暫存器

rax; rbx; rcx; rdx;

rsi; rdi; rbp; rsp;

r8; r9; r10; r11; r12; r13; r14; r15

段暫存器(segment register)

cs(code segment):**段暫存器;

ds(data segment):資料段暫存器;

ss(stack segment):堆疊段暫存器;

es(extra segment):附加段暫存器

應該掌握的16個暫存器

rax,rbx,rcx,rdx,rbp,rsp,rsi,rdi

r8,r9,r10,r11,r12,r13,r14,r15

通用暫存器共有8個: ax,bx,cx,dx, bp,sp, si,di;

資料暫存器 ax,bx,cx,dx

ax累加器(accumulator)

bx基位址暫存器(base register)

cx計數暫存器(count register)

dx資料暫存器(data register)

指標暫存器(pointer register):bp,sp

bp 基址指標暫存器(base register)

sp 堆疊指標暫存器(stack register)

變址暫存器(index register):si,di

si 源變址暫存器(source index)

di 目的變址暫存器(destination index)

暫存器具體用途

rax,rdx 常作為函式返回值使用

rdi,rsi,rdx,rcx,r8,r9常用於存放函式引數

rbx,rbp,r12,r13,r14,r15用於資料儲存

rsp,rbp,用於棧操作,rsp(棧指標暫存器,指向棧頂)(rsp為基底,rbp為棧頂,中間部分一般為棧空間)

記憶體位址格式為: 0x4bdc(%rip),一般是全域性變數,全域性區(資料段)

記憶體位址格式為: -0x78(%rbp),一般是區域性變數,棧空間

記憶體位址格式為: 0x10(%rax),一般是堆空間

rip(instruction pointer)指令指標:儲存著cpu下一條要執行的指令位址,一旦cpu讀取一條指令,rip會自動指向下一條指令(儲存下一條指令的z位址)

cs:ip 兩個暫存器指示了 cpu當前將要讀取的指令的位址,其中cs為**段暫存器,而ip為指令指標暫存器。

什麼叫做指示了cpu當前將要讀取的指令

你想讓cpu執行哪行指令,你就讓cs:ip指向儲存有指令的那塊記憶體即可。

任何時候,cs:ip指向的位址中的內容都是cpu當前執行的指令。

r開頭:64bit,8位元組

e開頭:32bit,4位元組

x/3xw 0x00007fff89adaa10

x/4xg 0x00007fff89adaa10

register read

general purpose registers:

rax = 0x00007fff89adaa10 libswiftcore.dylibtype metadata for any + 8 rbx = 0x0000000000000000 rcx = 0x00007ffeefbff618 rdx = 0x00007ffeefbff528 rdi = 0x0000000000000001 rsi = 0x00007ffeefbff518 rbp = 0x00007ffeefbff4f0 rsp = 0x00007ffeefbff490 r8 = 0x0000000000000000 r9 = 0x0000000000000000 r10 = 0x0000000000000000 r11 = 0x0000000000000000 r12 = 0x0000000000000000 r13 = 0x0000000000000000 r14 = 0x0000000000000000 r15 = 0x0000000000000000 rip = 0x0000000100000e0e 1111main + 30 at main.swift:10:7

rflags = 0x0000000000000212

cs = 0x000000000000002b

fs = 0x0000000000000000

gs = 0x0000000000000000

ORACLE相關內容

1 em,dbca,netca,netmgr出現亂碼方案 cd oracle home jre lib mv font.properties font.properties.bak mv font.properties.zh font.properties em,dbca,netca,netmgr詳...

JVM相關內容

本地 native code 每個因素對記憶體占用的影響又會隨著應用程式 執行環境和系統平台的不同而變化,那怎樣計算總的記憶體佔用量?是的,想得到乙個準確的數字不是那麼容易,因為 你很難控制本地 native 部分。你能控制的部分只有堆大小 xmx,類占用的記憶體 xx maxpermsize,還有...

指標相關內容

1.指標是變數,佔4位元組,存放的是位址 2.指標型別與零值比較 if n null 或者if n null 3.野指標 int p 空指標 int p null 避免野指標 以char型別為例 char p char mallloc sizeof char 10 要包含標頭檔案 include 使...