-
-
[旧帖]
分析__stdcall约定调用的困惑..望指点一下
0.00雪花
-
发表于:
2007-1-8 12:09
4146
-
[旧帖] 分析__stdcall约定调用的困惑..望指点一下
0.00雪花
按__stdcall约定调用函数test2(Par1, Par2)
push par2 ; 参数2
push par1 ; 参数1
call test2;
{
push ebp ; 保护现场原先的EBP指针
mov ebp, esp ; 设置新的EBP指针,指向栈顶
mov eax, [ebp+0C] ; 调用参数2
mov ebx, [ebp+08] ; 调用参数1
sub esp, 8 ; 若函数要用局部变量,则要在堆栈中留出点空间
…
add esp, 8 ; 释放局部变量占用的堆栈
pop ebp ; 恢复现场的ebp指针
ret 8 ; 返回(相当于ret; add esp,8)
}
1.为什么进入CALL后只保护了EBP这一个指针?其他的不用保护?
2.add esp, 8后原先的局部变量还在堆栈吗?我的意思是在esp+8后 局部的变量 还是会在esp的位置吗?或者说是在栈顶上面?内存中保存着 只是esp+8后esp指向了了一个新的位置 而局部变量在的位置就不是堆栈了 而不是清除了局部变量?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!