0

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

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

2 回答 2

3

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

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

于 2012-04-09T16:00:17.073 回答
0

你有

void (*x)();

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

然后您执行 3 次 printfs(),然后执行 3 次调用位于那里的函数。但我真的不明白这一点。有什么问题吗?这就是考试问题中的全部内容吗?

于 2012-04-09T16:02:22.350 回答