截屏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 (二進制的1位對應16進制的4位,計算機中的內(nèi)存地址一般用16進制表示缭召,0x開頭表示16進制數(shù)栈顷,所以后16進制數(shù)的后三位清零)
注:PC寄存器中存儲的地址是當前要執(zhí)行的指令地址,低12位清零嵌巷,代表當前內(nèi)存頁的起始地址
2. 將十進制數(shù)265萄凤,轉化為16進制數(shù),結果為0x109搪哪,0x109左移12位靡努,得到0x109000
注: adrp x8, 265中的265表示距離當前內(nèi)存頁265頁,每一頁為4K惑朦,即2的12次方兽泄。一個數(shù)乘以2的12次方,計算機中即是左移12位漾月,即低12位為0病梢。16進制中即低3位為0.
3. 將上述步驟一和步驟二中得到的16進制數(shù)相加,得到0x103060000梁肿,將0x103060000放入 x8 寄存器
4. 將x8寄存器中的地址值加上0xa30蜓陌,得到的結果0x103060a30放入到x8寄存器。
通過lldb命令 po 0x103060a30 可以打印變量的值
以上為個人理解吩蔑,如有錯誤之處护奈,請指出