1

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

(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)是错误的。

任何人都可以阐明两者之间的差异吗?

4

1 回答 1

6

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

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

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

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

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

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

剩下 (d) 以上都不是。

于 2013-06-30T15:16:06.167 回答