用“软件陷阱+程序口令”对付PC指针的弹飞当CPU受到外界干扰,有时PC指针会飞到另一段程序中,或跳到空白段去。如果PC指针飞到空白段去,倒也好处理。只要在空白段设立软件陷阱(拦截指令),将程序拦截到初始化段或程序错误处理段。但是,如果PC指针飞到另一段程序中去了,系统如何办?思路如下:1、首先,程序必须模块化。每个模块(子程序)执行一个功能。每个模块只有一个出口(RET)。2、设立一个模块(子程序)ID寄存器。3、为每个子程序配置一个唯一的ID号码。4、每当子程序执行完毕,要返回(RET)之前,先将本子程序的ID号送入 ID寄存器5、返回到上级程序后,先判断ID寄存器中的ID号。如果正确,则继续执行;如果不正确,则表示PC指针有可能已经跳错了,子程序没有按预计的出口返回,这时将程序拦截到初始化段或程序错误处理段。这种方法,如同在程序中设立了若干个岗哨,每次调用子程序返回后,都要对口令(ID号),验明正身后再放行。再配合软件陷阱,基本上可以将大多数PC指针弹飞的现象检测到。到了程序错误处理段,要杀要剐(冷启动还是热启动)就由您了。
文档内容节选
用软件陷阱程序口令对付 PC 指针的弹飞 当 CPU 受到外界干扰有时 PC 指针会飞到另一段程序中或跳到空白段去 如果 PC 指针飞到空白段去,倒也好处理只要在空白段设立软件陷阱拦截指令将程 序拦截到初始化段或程序错误处理段 但是如果 PC 指针飞到另一段程序中去了,系统如何办思路如下: 1首先,程序必须模块化每个模块子程序执行一个功能每个模块只有一个出口RET 2设立一个模块子程序ID 寄存器 3为每个子程序配置一个唯一的 ID 号码 4每当子程序执行完毕,要返回RET之前,先将本子程序的 ID 号送入 ID 寄存器 5返回到上级程序后,先判断 ID 寄存器中的 ID 号如果正确,则继续执行如果不正确, 则表示 PC 指针有可能已经跳错了,子程序没有按预计的出口返回,这时将程序拦截到初 始化段或程序错误处理段 这种方法,如同在程序中设立了若干个岗哨,每次调用子程序返回后,都要对口令ID 号,验明正身后再放行再配合软件陷阱,基本上可以将大多数 PC 指针弹飞的现象检测到 到了程序错误处理段,要杀要剐冷启动还是热启动就由您了 1 ......