新手求C语言函数压栈(VC)详解

gilnuy0106 2011-08-08 07:24:50
:    int Max(int a, int b)
4: {
00401010 push ebp
00401011 mov ebp,esp
00401013 sub esp,44h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-44h]
0040101C mov ecx,11h
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
5: return a>b?a:b;


ebp:函数堆栈基址指针寄存器
esp:函数堆栈栈顶指针寄存器
ebx:存储器地址寄存器
esi:源变址寄存器
edi:目的变址寄存器

以下是寄存器状态:
 EAX = 00000002 EBX = 7FFD5000
ECX = 00422FA8 EDX = 00000004
ESI = 7C9200D0 EDI = 0012FF80
EIP = 00401010 ESP = 0012FF20
EBP = 0012FF80 EFL = 00000202
MM0 = 0000000000000000
MM1 = 0000000000000000
MM2 = 0000000000000000
MM3 = 0000000000000000


这是ebx的内存内容(7f fd 50 00)
7FFD5000  00 00 01 00 FF FF FF FF  ........
7FFD5008 00 00 40 00 A0 1E 24 00 ..@...$.
7FFD5010 00 00 02 00 00 00 00 00 ........
7FFD5018 00 00 14 00 20 06 9A 7C .... .殀
7FFD5020 00 10 92 7C E0 10 92 7C ..抾..抾
7FFD5028 01 00 00 00 00 00 00 00 ........
7FFD5030 00 00 00 00 00 00 00 00

00 00 01 00是什么意思?表示什么?
这是esi的内存内容(7c 92 00 d0)
7C9200D0  50 45 00 00 4C 01 04 00  PE..L...
7C9200D8 80 F2 00 4D 00 00 00 00 ...M....
7C9200E0 00 00 00 00 E0 00 0E 21 .......!
7C9200E8 0B 01 07 0A 00 D0 07 00 ........
7C9200F0 00 5A 01 00 00 00 00 00

这个7c 92 00 d0 是什么意思?表示什么?
目的变址寄存器具体是什么意思。
我把上面的汇编走一遍发现
edi的内存(00 12 fe d8)的内容为:
B8  01 93 40 00 02 00 00 00  .揁.....
0012FEC0 61 00 00 40 00 00 92 7C a..@..抾
0012FEC8 02 2E 40 00 80 FF 12 00 ..@.....
0012FED0 D0 00 92 7C 00 50 FD 7F ..抾.P?
0012FED8 01 00 92 7C FF 00 92 7C ..抾..抾
0012FEE0 00 50 FD 7F 64 00 00 00 .P?d...
0012FEE8 00 00 00 00 28 00 00 00


不要拷贝的。
如果能讲解的仔细,确实给新人带来帮助。绝对加分。

...全文
189 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
gilnuy0106 2011-08-08
  • 打赏
  • 举报
回复
注意下最后的edi+4的内容是7c 92 00 ff不知道是什么,edi+8正好是ebx
edi-4也是ebx,edi-8是esi的值,这个edi到底是指向哪里?是在函数的栈里么?
感觉已经超出了当前函数栈了。这几个寄存器在函数压栈的时候的具体过程是什么。

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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