美文网首页
ADRP指令

ADRP指令

作者: 不仅仅是个程序猿 | 来源:发表于2020-10-26 19:13 被阅读0次
截屏2020-10-26下午6.49.13.png

每次看到adrp指令和add指令一起出现时,就代表着将会向某个寄存器中存储变量。

   内存地址                   汇编指令
0x102f571bc            adrp   x8, 265
0x102f571c0            add    x8, x8,#0xa30

在Xcode中调试时,我们可以很轻松的通过控制台打印出x8寄存器中的地址值(register read x8),从而打印出变量。

非Xcode环境中,我们需要计算变量的内存地址,计算方法如下:

   1.  PC寄存器的低12位清零,得到 0x102f57000  (二进制的1位对应16进制的4位,计算机中的内存地址一般用16进制表示,0x开头表示16进制数,所以后16进制数的后三位清零)
 注:PC寄存器中存储的地址是当前要执行的指令地址,低12位清零,代表当前内存页的起始地址
    2. 将十进制数265,转化为16进制数,结果为0x109,0x109左移12位,得到0x109000
   注: adrp   x8, 265中的265表示距离当前内存页265页,每一页为4K,即2的12次方。一个数乘以2的12次方,计算机中即是左移12位,即低12位为0。16进制中即低3位为0.
    3. 将上述步骤一和步骤二中得到的16进制数相加,得到0x103060000,将0x103060000放入 x8 寄存器
   4. 将x8寄存器中的地址值加上0xa30,得到的结果0x103060a30放入到x8寄存器。

通过lldb命令 po 0x103060a30 可以打印变量的值

以上为个人理解,如有错误之处,请指出

相关文章

网友评论

      本文标题:ADRP指令

      本文链接:https://www.haomeiwen.com/subject/cuhzmktx.html