有没有人可以向我解释这段代码?这是一个古老的考试问题,我在网上找不到答案。
void (*x)(); x=0xFFFF0000; printf("1"); x(); printf("2"); x(); printf("3"); x();
在经典的实模式 x86 架构上,您可以通过执行无条件 JMP 以地址 0xFFFF0000 来触发系统引导。
该代码基本上是定义x()
为一个函数,并将函数的内存地址设置为0xFFFF0000。当您调用该函数时,系统会CALL 0xFFFF000
在汇编程序级别执行或类似操作,并直接跳转到 BIOS 引导代码,从而触发系统重新启动。
你有
void (*x)();
这是一个指向返回 void 并接受 void 作为输入的函数的指针。您将其指向内存位置 0xFFFF0000,根据您的考试,这是冷启动功能所在的位置。
然后您执行 3 次 printfs(),然后执行 3 次调用位于那里的函数。但我真的不明白这一点。有什么问题吗?这就是考试问题中的全部内容吗?