在arm开发中经常使用函数,其中函数调用中经常会用到跳转。
函数调用过程编译器会自动记录跳转的地址 ,但是这些地址的调用方法和跳转方式一直都有很多的变化。
一般pc的跳转可以分为两大类
1.直接的pc寄存器赋值
mov pc,#0x0 ;pc 跳转到0地址
mov pc,lr ;pc 跳转到lr的地址
以上就是pc的寄存器直接给予一个指定的地址 ,强制pc跳转过去
2.利用跳转指令 B BL BX ...
B #0x0 ;跳转到0地址
B LR ;跳转到lrdizhi qu
&&&&这里增加一个 非常规的方法&&&
函数指针方法:
(int*) a(){}
a =0x0
这只一个函数指针 之后对于函数进行赋地址
之后调用这个函数指针 这样就跳转到这个被赋予的地址了
这里可以在编译器中看到这个函数 也可以在scatter文件中对于这个函数进行指定地址的链接过程
原文:http://blog.csdn.net/weiwei_xiaoyu/article/details/23202467