2012-04-09 45 views
0

有没有人可以向我解释这段代码? 这是一个旧的考试问题,我无法在网上找到答案。C中的冷启动代码

void (*x)(); 
x=0xFFFF0000; 
printf("1"); x(); 
printf("2"); x(); 
printf("3"); x(); 
+2

什么,具体来说,你不明白?你熟悉函数指针吗? – 2012-04-09 15:57:22

+0

我不明白那是什么代码呢? – user260223 2012-04-09 15:58:26

回答

3

在经典的实模式x86架构上,你可以通过做无条件JMP解决0xFFFF0000地址触发启动系统。

该代码基本上定义了x()作为函数,并将该函数的内存地址设置为0xFFFF0000。当你调用这个函数时,系统会在汇编程序级执行CALL 0xFFFF000或类似的操作,直接跳转到BIOS启动代码,触发系统重启。

0

您有

void (*x)(); 

这是一个指向一个函数返回空隙并接受空隙作为输入。您根据您的考试将其指向内存位置0xFFFF0000,这是冷启动功能所在的位置。

然后你做了3个printfs(),后面跟着3个位于那里的函数的调用。但我真的不明白这一点。有什么问题吗?这是考试问题中的一切吗?