给局部变量预留空间的问题

pangdu 2008-02-21 05:37:56
6: void myfunction(int a,int b)
7: {
00401020 push ebp
00401021 mov ebp,esp
00401023 sub esp,44h
00401026 push ebx
00401027 push esi
00401028 push edi

00401029 lea edi,[ebp-44h]
0040102C mov ecx,11h
00401031 mov eax,0CCCCCCCCh
00401036 rep stos dword ptr [edi]
8: int c = a+b;
00401038 mov eax,dword ptr [ebp+8]
0040103B add eax,dword ptr [ebp+0Ch]
0040103E mov dword ptr [ebp-4],eax
9: }

1;sub esp,44h ;这个预留空间大小怎么确定? 我的myfunction里面只有一个int类型的变量,怎么现在预留44字节?
2;下面三个寄存器为什么也要压入栈里面去?
ebx,esi,edi
...全文
98 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-02-22
  • 打赏
  • 举报
回复
和Debug版一样,调试的时候看。
pangdu 2008-02-21
  • 打赏
  • 举报
回复
Release版本的exe怎么看汇编代码.. 要先用其它工具反汇编?
pangdu 2008-02-21
  • 打赏
  • 举报
回复
多谢大家的解答 我去看看Release版本
dongyi940333 2008-02-21
  • 打赏
  • 举报
回复
学习^_^
cnzdgs 2008-02-21
  • 打赏
  • 举报
回复
1、你这段程序是用Debug配置编译的,编译器为了防止和检测你的局部变量使用时越界而固定预留的空间(不管是否定义了局部变量)。用Release配置编译就没有了。
2、VC编译程序固定会保存这三个积存器(不管是否使用了它们)。
大熊猫侯佩 2008-02-21
  • 打赏
  • 举报
回复
1 有些局变是编译器预留的。

2 在函数中保持不变,函数结尾处应该有 pop 的对应语句。在masm32中一般的写法是:

fuc proc uses ebx esi edi

fuc endp

21,457

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧