C中的冷启动代码

时间:2012-04-09 15:55:51

标签: c memory boot

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

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

2 个答案:

答案 0 :(得分:3)

在经典的实模式x86架构中,您可以通过执行无条件JMP来触发系统引导以解决0xFFFF0000。

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

答案 1 :(得分:0)

你有

void (*x)();

是指向返回void并接受void作为输入的函数的指针。您将其指向内存位置0xFFFF0000,这是冷启动功能根据您的检查所在的位置。

然后你做3个printfs(),然后是3个函数调用。但我真的没有看到这一点。有什么问题吗?这是考试中的问题吗?