-
-
[旧帖]
[求助]关于栈空间初始化的疑问
0.00雪花
-
发表于:
2009-9-19 17:29
1304
-
[旧帖] [求助]关于栈空间初始化的疑问
0.00雪花
本人极度菜鸟,烦请各位帮我看看:
int main()
{
int a=2,
b=4;
float c=2.0f;
bool v=1;
char x=2;
return 0;
}
A.在下面的汇编代码中,第3行分配了54h字节的栈空间,然后依次压入ebx、esi、edi三个寄存器值,使用了12h个字节,剩余的54h-12h=42h字节栈空间是否应该初始化?
第8行为什么用的是15h呢?
B.压了三次栈后,参数a的地址是否应该为ebp-c ?
相应的汇编代码为:
1 00401030 /> \55 push ebp
2 00401031 |. 8BEC mov ebp, esp
3 00401033 |. 83EC 54 sub esp, 54
4 00401036 |. 53 push ebx
5 00401037 |. 56 push esi
6 00401038 |. 57 push edi
7 00401039 |. 8D7D AC lea edi, dword ptr [ebp-54]
8 0040103C |. B9 15000000 mov ecx, 15
9 00401041 |. B8 CCCCCCCC mov eax, CCCCCCCC
10 00401046 |. F3:AB rep stos dword ptr es:[edi]
11 00401048 |. C745 FC 02000>mov dword ptr [ebp-4], 2 ; a=2
12 0040104F |. C745 F8 04000>mov dword ptr [ebp-8], 4 ;b=4;
13 00401056 |. C745 F4 00000>mov dword ptr [ebp-C], 40000000 ;c=2.0f;
14 0040105D |. C645 F0 01 mov byte ptr [ebp-10], 1 ;v=1;
15 00401061 |. C645 EC 02 mov byte ptr [ebp-14], 2 ;x=2;
16 00401065 |. 33C0 xor eax, eax ;return 0;
17 00401067 |. 5F pop edi
18 00401068 |. 5E pop esi
19 00401069 |. 5B pop ebx
20 0040106A |. 8BE5 mov esp, ebp
21 0040106C |. 5D pop ebp
22 0040106D \. C3 retn
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课