硬件地址跳到0处
(*(void(*)())0)();
准备常识
float (*h)();
表明h是一个指向返回值float类型的函数的指针
(float(*)())
表明一个”指向返回值float类型的函数的指针”的类型转化符
假定fp是一个函数指针,那么怎么调用fp所指向的函数,调用办法如下:
(*fp)();
依照人们的惯性思想,那么咱们能够这样写
(*0)();
上式不能收效,由于运算符*必需要一个指针来做操作数,并且这个指针还有必要是个函数指针。所以咱们必需要把0强制转化成一个函数指针(指向返回值为void类型的函数的指针)
假定fp是个float指针,声明如下
float * fp;
把0强制转化成一个float指针(把变量fp去掉就能够了)
(float *)0;
相似:
假定fp是函数指针为void类型的函数的指针),声明如下:
void (*fp)();
把0强制转化成该函数指针(变量fp去掉就能够了)
(void(*)())0
最后用(void(*)())0替代fp,然后得到调用的用法
(*(void(*)())0)();
可用typedef简化函数指针
例如:
typedef char * string;
string test=”hello”;
相似
typedef void(*func)(); //这样func就表明一个函数指针的类型
(*(func)0)();
比如
办法一:
typedef void (*pfunction)(void);
void FMI_Jump(void)
{
pfunction jump;
jump=(pfunction)(0x80000);
jump();
}
办法二:
((void(code *)(void))0xF400)();