打印

用“软件陷阱+程序口令”对付PC指针的弹飞

[复制链接]
1536|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pkat|  楼主 | 2011-11-23 22:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当CPU受到外界干扰,有时PC指针会飞到另一段程序中,或跳到空白段去。其实,如果PC指针飞到空白段去,倒也好处理。只要在空白段设立软件陷阱(拦截 指令),将程序拦截到初始化段或程序错误处理段。但是,如果PC指针飞到另一段程序中去了,系统如何办?小匠在这里推荐一种方法——程序口令,思路如下:

       1、首先,程序必须模块化。每个模块(子程序)执行一个功能。每个模块只有一个出口(RET)。

       2、设立一个模块(子程序)ID寄存器。

       3、为每个子程序配置一个唯一的ID号码。

       4、每当子程序执行完毕,要返回(RET)之前,

先将本子程序的ID号送入 ID寄存器。

       5、返回到上级程序后,先判断ID寄存器中的ID号。

       如果正确,则继续执行;如果不正确,则表示PC指针有可能已经跳错了,子程序没有按预计的出口返回,这时将程序拦截到初始化段或程序错误处理段。

       这种方法,如同在程序中设立了若干个岗哨,每次调用子程序返回后,都要对口令(ID号),验明正身后再放行。再配合软件陷阱,基本上可以将大多数PC指针弹飞的现象检测到。到了程序错误处理段,要杀要剐(冷启动还是热启动)就由您了。

       仅以一条代码来揭示程序飞跑的本质!750102H  ;MOV 01H,#02H  ,如当前PC不是指向75H,而是指向01H或02H,那么51内的指令译码器将把她们忠实地翻译成AJMP X01H 或 LJMP XXXXH  而XX01H XXXXH又是什么呢?天知道!这样恶性飞跑下去那还不死定!改革一下:

CLR A ;0C 4H
INC A ;04H
MOV R1,A ;0F9H
INC A ;04H  
MOV @R1,A  ;86H

       每一字节代码都不能在生成跳转和循环,且都是单字节指令!往那跑去?跑出去了都要自己回来!“在家”千日好!“跳出”事事难嘛!这样只要平时习惯了用累加 器和寄存器把数倒一倒,把那些危险代码都给倒掉,这样虽说给PC的“足”上多加了两字节的“包”可它不好“跑”啊!“足包”====跑!
有朋友会问:要是 PC抓做02H--LJMP 又有抓做了老鼻子远的XXH,再抓做隔壁的YYH不就没用了吗?提这样的问题只有ZENYIN这种钻牛角得才会提!
PC那一位最活跃啊?PC0啊!要“扯 拐”显然发生在她身上,至于那PC15同志啊,睡得更死猪一样,雷爆(强干扰)来了都打不醒?此外如果干扰都强到了PC高位都出错的地步!关电!关电!不 干了!“不是我们不行而是敌人太强大”!
反过来要是敌人在你的管理下,只是偶尔出来捣捣乱,但一出来就冲到屁西(PC)高层,就要问问是不是你的王国根基 (硬件)有问题了?而非出在意识形态(软件)上!硬件为本!软件为标!标本兼治铸就坚强体魄,方能百毒不侵!

相关帖子

沙发
baidudz| | 2011-11-23 23:15 | 只看该作者
方法很好

使用特权

评论回复
板凳
hotpower| | 2011-11-24 23:01 | 只看该作者
无用,hotisp内嵌的disasm51专门对付它们

使用特权

评论回复
地板
火箭球迷| | 2011-11-25 17:35 | 只看该作者
还是有些参考价值

使用特权

评论回复
5
秋天落叶| | 2011-12-10 22:33 | 只看该作者
检验一下是否有用

使用特权

评论回复
6
elec921| | 2011-12-10 22:39 | 只看该作者
mark

使用特权

评论回复
7
xsgy123| | 2011-12-10 22:47 | 只看该作者
这个方法实施起来也不太容易

使用特权

评论回复
8
FVJFIFE| | 2011-12-12 11:06 | 只看该作者
还是有参考价值的

使用特权

评论回复
9
给力芯片| | 2012-1-27 16:12 | 只看该作者
好方法,很有参考价值,学习了。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

2726

帖子

0

粉丝