adrp指令的浅析
- 首先我们去写一个函数
int fun(int a,int b)
{
//haha是printf函数的参数
printf("haha");
int c= a + g;
return c;
}
- 然后去调用
fun(1,2);
我们可以看到在main函数中传入了参数,1 和 2,先保存在w8和w9中,然后再把w0和w1保存到栈中,然后再赋值给x0和x1,然后再去调用fun函数
紧接着我们进入fun函数内部去看
x0保存了参数,传入printf函数
下面就举个例子
adrp x0, 1
其实做了下面的步骤
- 1. 将1的值,左移12位 1 0000 0000 0000 == 0x1000
- 2.将PC寄存器的低12位清零0x104bee870 ==> 0x104bee000,这里的PC寄存器的值是到adrp x0 1的那里的PC寄存器里面的值
- 3.将1 和 2 的结果相加给X0 寄存器!!
所以之后我们就可以根据adrp指令算出来的地址,可以去得到变量存储的相应的地址