地址改编号像是开"遵义会议",在保证了跳入的地址"正确"后,才能够实施对"正确"结果的捕捉行为. 否则,跳飞的程序乱改数据就像一匹不能驯服的野马,没人知道它所产生的后果.
但是即使保证了跳入的地址"正确"后也不能解决死锁的问题.(这次讨论暂不涉及看门狗的问题)
在软件包more.asp?name=hotpower&id=9554中实际已给出了一个简单的防御程序.
在LPCARM自身的防御系统中,实际已包含了许多的软件保护措施.
如保护使能寄存器VIC->Protection=1时,在用户模式是不能对VIC结构的任何成员进行改写的. 这也包括VIC->VectAddrs及VIC->VectAddr等危险人物.
也就是说在理论上,当系统工作在用户模式下,VIC是"安全"的.
但是,当任何方式的中断到来后,情况就不一样了.
首先,不管VIC->Protection为何值,VIC结构是可以改写的(VIC->VectAddr用于清除中断内部标志).
此时,全部的危险人物都会出来捣蛋.
头号的危险人物(暂称黑桃A)当属中断使能寄存器VIC->IntEnable.
如果某向量中断已开放,干扰也可能将其关闭,反之,会将其开放.
用户一般不会对未使能的向量中断编写ISR,要写肯定被人说是吃饱了没事干了!!!
但是,你会在菜农改编的STARTUP.S中看到未用的都被直接链接到复位向量强行复位.
当然以上都是在向量控制寄存器VIC->VectCntls该向量中断也同时被势能的情况下发生的,这种概率几乎不能发生.
最可能发生的将是有用户默认中断程序时,未使能的向量中断都将被导入DEF_Handler()内运行.(这时IRQStatus的对应位被置1)
所以,在DEF_Handler()拦截将是最重要的措施...
晕菜~~~回复写多了肯定晕到,就先到这里吧...
看完后再继续探讨吧...
|
文章评论(0条评论)
登录后参与讨论