Visual Studio反汇编 - 错误行上的`else`关键字

时间:2015-08-29 09:48:10

标签: visual-studio visual-c++ visual-studio-2015 disassembly

以下是函数中的一段代码:

while (true)
{
  if (some_condition_here)
  {
    // ...
  }
  else
  {
    // ...
  }
}

在调试和查看VS的反汇编窗口时,我看到以下程序集以及显示的相应源代码行:

while (true)
DF3E9E4C  xor         eax,eax  
DF3E9E4E  cmp         eax,1  
DF3E9E51  je          DF3E9EBAh
{
  if (some_condition_here)
DF3E9E53  ; condition     
DF3E9E6E  test        eax,eax  
DF3E9E70  je          DF3E9EA3h  
  {
DF3E9E72  ; ...
DF3E9E9B  ; last line, no jump
  }
  else
; jump to end of if-else block
DF3E9EA1  jmp         DF3E9EB8h
  {
DF3E9EA3  ; ...
  }
}
; jump to start of while loop
DF3E9EB8  jmp         DF3E9E4Ch

如果我们检查if块的结尾和else块的开头:

DF3E9E9B  ; last line, no jump
  }
  else
; jump to end of if-else block
DF3E9EA1  jmp         DF3E9EB8h
  {

我们可以清楚地看到else关键字比应该出现的位置早一行:

DF3E9E9B  ; last line, no jump
  }
; jump to end of if-else block
DF3E9EA1  jmp         DF3E9EB8h
  else
  {

这是VS中的错误,还是存在这种不匹配的具体原因?也许我错过了至关重要的事情?

0 个答案:

没有答案