这只是相关源码,参考上一篇博客《函数调用全过程分析》
#include<stdio.h>
int *pOfaddr;
int p;
int plus(int a,int b);
int test(void);
int main(void){
int (*Pfun)(int a,int b);
Pfun = plus;
printf("%d\n",(*Pfun)(3,2));
printf("aaaaaaaaaaaaaaaaaaaaaaa\n");
return 0;
}
int plus(int a,int b){
int (*Ptest)(void);
Ptest = test;
p = *((int *)(&Ptest) + 2);
pOfaddr = (int *)((int *)(&Ptest) + 2);
*((int *)(&Ptest) + 2) = (int)test;
return a - b;
}
int test(void){
int a = 3;
printf("%p\n",&a);
*(&a + 4) = p;
//*(pOfaddr + 2) = p;
printf("%p\n",pOfaddr);
printf("eeeeeeeeeeeeeeeeeeeeeeee\n");
return 1;
}