我有以下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 2008的反汇编窗口中执行此操作时,我会看到对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的四行将它们称为a、b和c,而不是相对于EBP的偏移。
请有人建议我需要对Visual做些什么,让它通过EBP提供给他们参考吗?我已经在项目设置中禁用了C++优化;否则,我甚至不会调用我的函数。
发布于 2015-03-20 13:39:07
反汇编程序只是试图提供帮助,而不是给你太多无关细节的垃圾邮件。并非完全偶然,在内联程序集中也允许使用__asm关键字的语法缩写。
您可以前后切换,右键单击“反汇编”窗口并取消“显示符号名”.现在您将看到真正的机器代码:
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] https://stackoverflow.com/questions/29166985
复制相似问题