Sep*_*and 3 x86 assembly dos interrupt-handling
一些小丑(BIOS/DOS/TSR ......)在中断向量表中写入了随机数据.我知道这是因为拆卸告诉了我.
通常在占用中断向量之前,我验证所选的IVT插槽是空的.但是,有了所有这些留下来的数据,一个不起眼的应用程序如何知道钩住特定的中断向量仍然是安全的?
虽然我的程序员参考描述了DOS功能25小时SetInterruptVector
为
" 安全地修改中断向量以指向指定的中断处理程序"
我不认为这种预先存在的虚假内容太过关注.到目前为止安全!
是否有一些巧妙的方法可以绝对确定中断向量是免费的?
不,没有巧妙绝对可靠的方法来检查矢量是否是免费的.
这是因为中断的每个可能的2 32个值都可能是有效值.
某些价值可能非常可疑,但有效:
add [bx+si], al
有效的DWORD .当然,上面的一些内容非常紧张并且涉及将数据作为代码执行,但是你不应该信任向量指针的主要原因是BIOS可能用至少一个虚拟ISR填充每个向量槽.
这不会让无意中糟糕的制作int
指令挂起系统.
你可以做几件事:
使用中断2F
的诠释2F和其变体可替代的多重中断规范(AMIS)在诠释2D可以用作共享/复用的中断.
然而,AMIS确实获得了很多人气.
无论如何都要尝试找一个空位
作为第一次尝试,您可以尝试在IVT中搜索空条目1,虽然理论上有效但它们可能是空位.
您还可以尝试找到一个或两次出现的指针,表明存在虚拟ISR(因为ISR无法轻易识别它的向量编号).
我会和你一起去.1个人,如果不可能,我会实施n.3.如果不可能,我会使用n.4来回退到n.2.
1捕捉所有"可疑"值是不切实际的,只会略微增加,所以只需要拍摄大的值.
归档时间: |
|
查看次数: |
121 次 |
最近记录: |