ADRP指令

截屏2020-10-26下午6.49.13.png

每次看到adrp指令和add指令一起出現(xiàn)時,就代表著將會向某個寄存器中存儲變量。

   內(nèi)存地址                   匯編指令
0x102f571bc            adrp   x8, 265
0x102f571c0            add    x8, x8,#0xa30

在Xcode中調(diào)試時,我們可以很輕松的通過控制臺打印出x8寄存器中的地址值(register read x8),從而打印出變量。

非Xcode環(huán)境中,我們需要計算變量的內(nèi)存地址,計算方法如下:

   1.  PC寄存器的低12位清零,得到 0x102f57000  (二進(jìn)制的1位對應(yīng)16進(jìn)制的4位,計算機(jī)中的內(nèi)存地址一般用16進(jìn)制表示,0x開頭表示16進(jìn)制數(shù),所以后16進(jìn)制數(shù)的后三位清零)
 注:PC寄存器中存儲的地址是當(dāng)前要執(zhí)行的指令地址,低12位清零,代表當(dāng)前內(nèi)存頁的起始地址
    2. 將十進(jìn)制數(shù)265,轉(zhuǎn)化為16進(jìn)制數(shù),結(jié)果為0x109,0x109左移12位,得到0x109000
   注: adrp   x8, 265中的265表示距離當(dāng)前內(nèi)存頁265頁,每一頁為4K,即2的12次方。一個數(shù)乘以2的12次方,計算機(jī)中即是左移12位,即低12位為0。16進(jìn)制中即低3位為0.
    3. 將上述步驟一和步驟二中得到的16進(jìn)制數(shù)相加,得到0x103060000,將0x103060000放入 x8 寄存器
   4. 將x8寄存器中的地址值加上0xa30,得到的結(jié)果0x103060a30放入到x8寄存器。

通過lldb命令 po 0x103060a30 可以打印變量的值

以上為個人理解,如有錯誤之處,請指出

最后編輯于
?著作權(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ù)。

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