【问题标题】:What's the difference between a "debug interrupt" and int 80h?“调试中断”和 int 80h 有什么区别?
【发布时间】:2013-06-30 09:18:56
【问题描述】:

这是一道测试题。可能的答案是:

(a) Debug interrupt is always caused by an error, and int 80h isn't.
(b) Only on int 80h the returning address is saved.
(c) int 80h is always caused by an error and debug interrupt isn't.
(d) None of the above.

我唯一肯定的是 (c) 是错误的。

有人能解释一下两者之间的区别吗?

【问题讨论】:

  • 我不知道“调试中断”是什么,我知道该术语没有标准含义。 int 80h 所做的是特定于操作系统的。
  • 我猜是“调试中断”,OP 的意思是int 3h。另外,我可以向你保证 (b) 也是错误的,因为 any 中断保存了返回地址
  • @DrewMcGowen:它也可能是指int 1,或异常中断,例如页面错误或被零除。

标签: assembly x86


【解决方案1】:

调试中断总是由错误引起的,而int 80h则不是

调试中断几乎总是有意插入代码中。使用内联汇编、代码中的内在函数(如 __debugbreak)或由调试器让处理器在到达语句开头时调用调试中断。通过在 x86 和 x64 处理器上编码 int 03h 的方式强烈启用,它是一条需要单字节 (CCh) 的指令,因此很容易被调试器插入。 INTO 是另一个奇怪的东西,其余的占两个字节。与错误无关,所以没有。

仅在 int 80h 上保存返回地址

处理器对所有软件中断的处理方式相同,中断号只是选择中断处理程序。 int 03h 也将返回地址存储在堆栈中,所以没有。

int 80h 总是由错误引起的,调试中断不是

int 80h 可以做什么完全取决于操作系统。但这几乎肯定是指 Linux,它使用 int 80h 转换到内核模式来调用低级操作系统函数。这些当然不是错误,所以不是。

留下 (d) 以上都不是。

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2021-04-02
    相关资源
    最近更新 更多