64,639
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
long becall(long a)
{
return (*((long*)(&a-1)));
}
void work(int a)
{
if(a>1000)exit(0);
printf("%d\n",a);
}
int main(void)
{
int a=0;
long addr;
void(*pf)(void);
addr=becall(0);
work(a++);
pf=(void(*)(void))addr; // 这个是强制 转换成函数指针吗?
(*pf)(); //调用的是什么啊?
return -1;
}
/*
return (&a)[-1]; 如下图:
-4 0 4
ip a
你可以把&a看做是一个long数组的起始位置
(&a)[0]也就是得到a的值
(&a)[-1]就是得到ip的值
*/
#include <stdio.h>
long becall(long a)
{
return (&a)[-1];
}
void work(int a)
{
if(a>1000)
exit(0);
printf("%d\n",a);
}
int main(void)
{
int a=0;
long addr;
void(*pf)(void);
addr=becall(0);
//lbl_loop:
work(a++);
pf=(void(*)(void))addr; // 这个是强制 转换成函数指针吗?
(*pf)(); //调用的是什么啊?
return -1;
}