Board logo

标题: 怎样在C语言中实现软关机或重新启动? [打印本页]

作者: profree     时间: 2004-6-30 00:00    标题: 怎样在C语言中实现软关机或重新启动?

如题,我现在急着要,
作者: boblhh9999     时间: 2004-7-1 00:00
在TC20中实现计算机启动的方法:
           unsigned char code[]={0xea,0x0,0x0,0xff,0xff};
           ( *(void(far *)())code )(); //启动计算机
作者: leoweight     时间: 2004-7-1 00:00
楼上的大哥好高深呀
作者: boblhh9999     时间: 2004-7-3 00:00
这是夸我还是糗我???
资料来源转贴

作者: wks_love     时间: 2004-7-5 00:00
这是什么意思啊?我怎么满眼的 括号和乱码!啥意思啊?
你怎么能把这背下来的?
作者: zoologist     时间: 2004-7-6 00:00
开玩笑~怎么可能!
作者: TurboY     时间: 2004-7-7 00:00
重启可用嵌入汇编asm jmp far 0ffffh:0000或调用INT19H
关机不清楚,应和ACPI的BIOS功能有关。
作者: zk88     时间: 2004-7-7 00:00


  Quote:
以下是引用boblhh9999在2004-7-1 上午 02:19:07的发言:
在TC20中实现计算机启动的方法: 
           unsigned char code[]={0xea,0x0,0x0,0xff,0xff}; 
           ( *(void(far *)())code&nbsp(); //启动计算机

完整代码 tc2.0 passed
unsigned char code[]={0xea,0x0,0x0,0xff,0xff};
main()
{
( *(void(far *)())code )(); //启动计算机
}
注:纯DOS下一运行即重启

作者: profree     时间: 2004-7-7 00:00
真是厉害,谢谢
作者: xy_god     时间: 2004-7-8 00:00


  Quote:
以下是引用boblhh9999在2004-7-1 上午 02:19:07的发言:
在TC20中实现计算机启动的方法: 
           unsigned char code[]={0xea,0x0,0x0,0xff,0xff}; 
           ( *(void(far *)())code&nbsp(); //启动计算机

{0xea,0x0,0x0,0xff,0xff}这个估计是一串实现重新启动的机器代码,
而*(void(far *)())code则是跳转到上述机器代码处执行,由于
不在同一段内,所以要用far来修饰。原理应该是这个样子吧?

作者: boblhh9999     时间: 2004-7-14 00:00
10楼解释的很明白,惭愧我只会使用,没能解释明白
作者: 笑傲江湖     时间: 2004-7-31 00:00
{0xea,0x0,0x0,0xff,0xff}汇编释义:0xea-JMP 跳转指令0x0,0x0-0000h,偏移地址0xff,0xff-ffffh,基地址合起来就是:asm jmp far 0ffff:0000乱猜的,不要当真![em05][em05]
作者: qb45     时间: 2004-8-1 00:00
用qb一句搞定OUT &H64, &HFE     
作者: henrya2     时间: 2006-2-25 21:21
为什么要用缓冲区溢出呢,直接调用中断不是很好吗