一些小丑(BIOS / DOS / TSR ...)在中断向量表中写入了随机数据。我知道这是因为拆卸告诉了我。
通常在占用中断向量之前,我会验证所选的IVT插槽是否为空。但是对于所有这些留下数据,一个不起眼的应用程序如何知道钩住特定的中断向量仍然是安全的?
虽然我的程序员参考文献描述了DOS函数25h textFieldShouldBeginEditing
为
" 安全修改中断向量以指向指定的中断处理程序"
我不认为它过分关注这种预先存在的虚假内容。到目前为止安全!
是否有一些巧妙的方法可以绝对确定中断向量是空闲的?
答案 0 :(得分:5)
不,没有巧妙绝对可靠的方法来检查矢量是否空闲。
这是因为中断的每个可能的2 32 值都可能是有效值。
某些值可能非常可疑,但有效:
add [bx+si], al
。当然上面的一些内容非常紧张并且涉及将数据作为代码执行,但是你不应该信任向量指针的主要原因是BIOS很可能用至少一个虚拟ISR填充每个向量槽。 />
这不会让无意中糟糕的int
指令挂起系统。
你可以做几件事:
使用中断2F
位于Int 2F的Alternate Multiplex Interrupt Specification (AMIS)及其变体Int 2D可用作共享/多路复用中断。
然而,非盟特派团的确受到了很大的欢迎。
无论如何都要找个空位
作为第一次尝试,您可以尝试在IVT中搜索空条目 1 ,虽然理论上有效但它们可能是空插槽。
您还可以尝试查找一次或多次出现的指针,表明存在虚拟ISR(因为ISR无法轻易识别它的向量编号)。
我会和n一起去。 1个人,如果不可能,我会实施n。 3.如果不可能,我会使用n.4来回退到n。 2.
1 捕获所有“可疑”值是不切实际的,只会略微增加,所以只需拍摄大的。