Visual studio 引用堆栈变量时不使用 EBP

Visual studio doesn't use EBP when referring to stack variable

我有以下 C++ 代码

int myFuncSum( int a, int b)
{
    int c;
    c = a + b;
    return c;
}

int main(int argc, char *argv[])
{
    int result;
    result = myFuncSum(100, 200);
    return 0;
}

当我在我的 Win7 Pro 机器上 Visual Studio 2008 的反汇编 window 中逐步执行此操作时,我看到以下调用 myFuncSum() 的内容:

int myFuncSum( int a, int b)
{
001C1000  push        ebp  
001C1001  mov         ebp,esp 
001C1003  push        ecx  
    int c;
    c = a + b;
001C1004  mov         eax,dword ptr [a] <--------------------
001C1007  add         eax,dword ptr [b] <--------------------
001C100A  mov         dword ptr [c],eax <--------------------
    return c;
001C100D  mov         eax,dword ptr [c] <--------------------
}

正如我所指出的,引用变量 a、b 和 c 的四行是指它们本身,而不是相对于 EBP 的偏移量。

任何人都可以建议我需要对 Visual Studio 做些什么才能通过 EBP 引用他们吗?我已经在项目设置中禁用了 C++ 优化;如果不这样做,我什至不会调用我的函数。

反汇编程序只是想提供帮助,而不是向您发送过多无关细节的垃圾邮件。不完全是偶然的,这种语法缩写也被允许在内联汇编中使用 __asm 关键字。

可以来回切换,右击反汇编window,取消勾选Show Symbol Names。现在您将看到真正的机器码:

    c = a + b;
003613DE  mov         eax,dword ptr [ebp+8]  
003613E1  add         eax,dword ptr [ebp+0Ch]  
003613E4  mov         dword ptr [ebp-8],eax  
    return c;
003613E7  mov         eax,dword ptr [ebp-8]