【问题标题】:How to understand an _asm command in Visual C++如何理解 Visual C++ 中的 _asm 命令
【发布时间】:2019-11-18 21:09:48
【问题描述】:

我在MS Visual Studio中捡别人的C++代码,遇到了这样一行:

 if (l > n) _asm{int 3};

我知道这是为了破坏调试器。我也明白它已被弃用并被替换为:

__debugbreak()

我的问题是......这是如何工作的?为什么要在调试器中产生这样的内联汇编命令?

【问题讨论】:

  • 对于以后的帖子,最好在发布与汇编语言相关的问题时包含目标操作系统/硬件。

标签: c++ visual-studio-2010 visual-c++


【解决方案1】:

这与使用 IDE 设置断点相同,但不同之处在于,使用 IDE 或任何其他调试器,它会设置一个断点,用int 3__asm { int 3 } 覆盖所选的操作码,它设置为一个新的操作码行。

【讨论】:

    【解决方案2】:

    添加到注释中,int 3 是触发硬件中断的汇编指令,这会导致正在运行的线程(您的代码)在操作系统服务中断时停止。不确定具体细节,但调试器必须能够挂接到操作系统以获取该中断的通知,并采取适当的行动。

    阅读更多:https://blogs.msdn.microsoft.com/kangsu/2005/09/07/no-more-int-3/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 2014-01-13
      相关资源
      最近更新 更多