gpt4 book ai didi

assembly - 找到一个空闲的中断槽

转载 作者:行者123 更新时间:2023-12-01 11:22:12 25 4
gpt4 key购买 nike

一些 clown (BIOS/DOS/TSR...)在中断向量表中写入了随机数据。我知道这一点,因为拆卸告诉我。

通常在获取中断向量之前,我会验证所选的 IVT 插槽是否为空。但是有了所有这些遗留数据,一个不起眼的应用程序怎么能知道 Hook 一个特定的中断向量仍然是安全的呢?

虽然我的程序员引用描述了 DOS 函数 25h SetInterruptVector作为

"Safely modifies an interrupt vector to point to a specified interrupt handler"



我认为它并不太关心这种预先存在的虚假内容。到目前为止安全!

是否有一些巧妙的方法可以绝对确定中断向量是免费的?

最佳答案

不,没有巧妙的绝对可靠的方法来检查向量是否免费。
这是因为中断的 232 个可能值中的每一个都可能是有效值。
某些值可能非常可疑,但有效:

  • 0ffffh:0ffffh 可以是有效的(指向带有 A20 掩码的 0ffefh)。
  • 0000h:0000h 可以是有效的,即使在向量 0 上也是如此。值为零的 DWORD 解码为一对 add [bx+si], al哪些是有效的。
  • 0b800h:0000h 和其他类似的 ROM 地址可以是有效的,因为扩展 ROM 可以用于携带代码。尽管标准视频内存不太可能。
  • 保留的 BIOS 区域中的地址,如 (E)BDA,如果数据经过特殊处理,既是有效代码又是有效信息,理论上可以是有效的。

  • 当然,上面的一些内容非常紧张并且涉及将数据作为代码执行,但您不应该信任向量指针的主要原因是 BIOS 可能会用至少一个虚拟 ISR 填充每个向量槽。
    这不会让一个无意的坏人制作 int指令挂起系统。

    你可以做几件事:
  • 链接
    选择一个未过度拥挤的中断号 N。选择一组我尚未使用的输入值(例如 AH=d0-ff)。将您的 ISR 附加到 N 并仅处理那些 I 值,将其他输入委托(delegate)给前一个 ISR。
  • 针对特定平台
    一些中断向量,如 int EA , 仅在特定系统中使用。由于这些系统中的大多数都已消失,因此您可以收回它们的中断。
    如果您窃取了一个中断向量并且一切正常并且没有人提示,那么这就是您的中断。只需仔细检查场所。
  • 使用中断 2F
    Int 2F及其变体Alternate Multiplex Interrupt Specification (AMIS)Int 2D可用作共享/复用中断。
    然而,AMIS 并没有获得太多的人气。
  • 尽量找个空位
    作为第一次尝试,您可以尝试在 IVT 中搜索空条目1,虽然理论上有效,但它们可能是空槽。
    您还可以尝试查找出现超过一两次的指针,这表明存在虚拟 ISR(因为 ISR 无法轻松识别其向量编号)。

  • 我会和n一起去。 1个人,如果不可能,我会实现n。 3. 如果不可能,我会使用 n。 4 回退到 n。 2.

    1 捕捉所有“可疑”值是不切实际的,只会带来一点好处,所以只为大的。

    关于assembly - 找到一个空闲的中断槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40831403/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com