菜鸟请教一个简单汇编问题

codelabs 2012-07-21 03:48:11
源程序:
int foo(int m,int n)
{
int i =0;
int j =0;
return 0;
}

反汇编:



6: int foo(int m,int n)
7: {
00401020
push ebp
00401021 mov ebp,esp

00401023 sub esp,48h

00401026 push ebx
00401027 push esi
00401028 push edi

00401029 lea edi,[ebp-48h]
0040102C mov ecx,12h
00401031 mov eax,0CCCCCCCCh
00401036 rep stos dword ptr [edi]


8: int i =0;
00401038 mov dword ptr [ebp-4],0
9: int j =0;
0040103F mov dword ptr [ebp-8],0

10: return 0;
00401046 xor eax,eax

11: }

疑惑:

foo函数在执行 int i=0;之前有
00401026 push ebx
00401027 push esi
00401028 push edi
操作。

那么 ptr[dbp-4]的地址保存的内容不应该是ebx ???为什么变成了i 的地址?
...全文
120 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
codelabs 2012-07-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
sub esp,48h

00401026 push ebx
00401027 push esi
00401028 push edi
SP已经减了48再push的
[/Quote]

谢谢,我明白你的意思了。我最近看一本装载与连接的书,是书中的插图误导了我,或者是我理解错了插图。
WJN92 2012-07-21
  • 打赏
  • 举报
回复
sub esp,48h

00401026 push ebx
00401027 push esi
00401028 push edi
SP已经减了48再push的
ProgrammingRing 2012-07-21
  • 打赏
  • 举报
回复
入栈变得是esp而不是ebp

21,458

社区成员

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

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