有没有人可以向我解释这段代码? 这是一个旧的考试问题,我无法在网上找到答案。C中的冷启动代码
void (*x)(); x=0xFFFF0000; printf("1"); x(); printf("2"); x(); printf("3"); x();
有没有人可以向我解释这段代码? 这是一个旧的考试问题,我无法在网上找到答案。C中的冷启动代码
void (*x)(); x=0xFFFF0000; printf("1"); x(); printf("2"); x(); printf("3"); x();
在经典的实模式x86架构上,你可以通过做无条件JMP解决0xFFFF0000地址触发启动系统。
该代码基本上定义了x()
作为函数,并将该函数的内存地址设置为0xFFFF0000。当你调用这个函数时,系统会在汇编程序级执行CALL 0xFFFF000
或类似的操作,直接跳转到BIOS启动代码,触发系统重启。
您有
void (*x)();
这是一个指向一个函数返回空隙并接受空隙作为输入。您根据您的考试将其指向内存位置0xFFFF0000,这是冷启动功能所在的位置。
然后你做了3个printfs(),后面跟着3个位于那里的函数的调用。但我真的不明白这一点。有什么问题吗?这是考试问题中的一切吗?
什么,具体来说,你不明白?你熟悉函数指针吗? – 2012-04-09 15:57:22
我不明白那是什么代码呢? – user260223 2012-04-09 15:58:26