【发布时间】:2017-04-11 09:56:03
【问题描述】:
一些小丑(BIOS/DOS/TSR...)在中断向量表中写入了随机数据。我知道这一点,因为拆卸告诉我。
通常在获取中断向量之前,我会验证所选的 IVT 插槽是否为空。但是有了所有这些left-behind-data,一个不起眼的应用程序怎么知道挂钩一个特定的中断向量仍然是安全的呢?
虽然我的程序员参考将 DOS 函数 25h SetInterruptVector 描述为
“安全地修改中断向量以指向指定的中断处理程序”
我认为它不会太在意这种预先存在的虚假内容。到目前为止,安全!
有什么巧妙的方法可以绝对确定一个中断向量是空闲的吗?
【问题讨论】:
-
“安全”可能意味着确保在更新向量时不会发生中断。其余问题的答案几乎肯定是:不。
-
您可以使用多路复用中断 (2Fh) 或备用多路复用中断 (AMIS, 2Dh)。但是您也可以选择一些 BIOS 和 MS-DOS 未记录为使用的随机中断。如果您实际上正在运行任何 TSR,则不难确定是否有人碰巧使用了您选择的中断。只需覆盖矢量,看看是否有任何损坏。
标签: assembly x86 dos interrupt-handling