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