“调试中断”和int 80h有什么区别?

itz*_*aki 1 x86 assembly

这是来自测试的问题。可能的答案是:

(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.
Run Code Online (Sandbox Code Playgroud)

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

谁能阐明两者之间的差异?

Han*_*ant 5

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

几乎总是有意将调试中断插入代码中。内联汇编,代码中的内在函数(如__debugbreak)或由调试器使用,以使处理器在到达语句开始时调用调试中断。通过在x86和x64处理器上对int 03h进行编码的方式,该功能得到了强大的支持,它是一条占用单个字节(CCh)的指令,因此调试器非常容易插入。INTO是另一个奇数球,其余占两个字节。与错误无关,所以没有。

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

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

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

一个完整的80h可能完全取决于操作系统。但这几乎可以肯定是指Linux,它使用int 80h转换为内核模式以调用底层操作系统功能。这些当然不是错误,所以没有。

留下(d)以上都不是。