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]
我有以下 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]