首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Visual在引用堆栈变量时不使用EBP

Visual在引用堆栈变量时不使用EBP
EN

Stack Overflow用户
提问于 2015-03-20 12:54:05
回答 1查看 410关注 0票数 1

我有以下C++代码

代码语言:javascript
运行
复制
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()的调用如下:

代码语言:javascript
运行
复制
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++优化;否则,我甚至不会调用我的函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-20 13:39:07

反汇编程序只是试图提供帮助,而不是给你太多无关细节的垃圾邮件。并非完全偶然,在内联程序集中也允许使用__asm关键字的语法缩写。

您可以前后切换,右键单击“反汇编”窗口并取消“显示符号名”.现在您将看到真正的机器代码:

代码语言:javascript
运行
复制
    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]  
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29166985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档