如何理解 Visual C++ 中的 _asm 命令
Posted
技术标签:
【中文标题】如何理解 Visual C++ 中的 _asm 命令【英文标题】:How to understand an _asm command in Visual C++ 【发布时间】:2019-11-18 21:09:48 【问题描述】:我在MS Visual Studio中捡别人的C++代码,遇到了这样一行:
if (l > n) _asmint 3;
我知道这是为了破坏调试器。我也明白它已被弃用并被替换为:
__debugbreak()
我的问题是......这是如何工作的?为什么要在调试器中产生这样的内联汇编命令?
【问题讨论】:
Read the section on INT3 对于以后的帖子,最好在发布与汇编语言相关的问题时包含目标操作系统/硬件。 【参考方案1】:这与使用 IDE 设置断点相同,但不同之处在于,使用 IDE 或任何其他调试器,它会设置一个断点,用int 3
和__asm int 3
覆盖所选的操作码,它设置为一个新的操作码行。
【讨论】:
【参考方案2】:添加到注释中,int 3 是触发硬件中断的汇编指令,这会导致正在运行的线程(您的代码)在操作系统服务中断时停止。不确定具体细节,但调试器必须能够挂接到操作系统以获取该中断的通知,并采取适当的行动。
阅读更多:https://blogs.msdn.microsoft.com/kangsu/2005/09/07/no-more-int-3/
【讨论】:
以上是关于如何理解 Visual C++ 中的 _asm 命令的主要内容,如果未能解决你的问题,请参考以下文章
如何将 x86 和 x64 asm 文件包含到单个 Visual Studio 项目中?
使用 Visual C++ 环境和“Asm”关键字作为 Assembler IDE 的替代方案?