赞
踩
汇编指令STOS(Store String Data)
用法:stos dst ;将寄存器(AX,EAX)里的内容存储(store)到内存单元地址(ES:DI),同时CPU自动修改DI,以指向下一元素;int func(int a, int b)
{
int temp = a + b;
return temp;
}
int main()
{
func(1, 2);
}
func函数
调用压栈过程分析;
push ecx
ecx 并没有被用到,我自己得理解是push后这里得栈帧占用,否则后面得 [ebp-4] // 疑问点
func函数
返回弹栈过程分析;
add esp,8
为了恢复esp,因为之前压了两个参数,所以恢复回去;//int func(int a, int b)
//{
004C1570 push ebp
004C1571 mov ebp,esp
004C1573 push ecx
// int temp = a + b;
004C1574 mov eax,dword ptr [ebp+8]
004C1577 add eax,dword ptr [ebp+0Ch]
004C157A mov dword ptr [ebp-4],eax
// return temp;
004C157D mov eax,dword ptr [ebp-4]
//}
004C1580 mov esp,ebp
004C1582 pop ebp
004C1583 ret
// func(1, 2);
00F3A328 push 2
00F3A32A push 1
00F3A32C call func (0F32063h)
00F3A331 add esp,8
func函数
调用压栈过程分析;
//int func(int a, int b)
//{
00F35260 push ebp
00F35261 mov ebp,esp
00F35263 sub esp,0CCh
00F35269 push ebx
00F3526A push esi
00F3526B push edi
00F3526C lea edi,[ebp+0CCh]
00F35272 mov ecx,33h
00F35277 mov eax,0CCCCCCCCh
00F3527C rep stos dword ptr es:[edi]
00F3527E mov ecx,offset _CB9A9D65_test@cpp (0F5A04Ah)
00F35283 call @__CheckForDebuggerJustMyCode@4 (0F31726h)
// int temp = a + b;
00F35288 mov eax,dword ptr [ebp+8]
00F3528B add eax,dword ptr [ebp+0Ch]
00F3528E mov dword ptr [ebp-8],eax
// return temp;
00F35291 mov eax,dword ptr [ebp-8]
//}
00F35294 pop edi
00F35295 pop esi
00F35296 pop ebx
00F35297 add esp,0CCh
00F3529D cmp ebp,esp
00F3529F call 00F31767
00F352A4 mov esp,ebp
00F352A6 pop ebp
// func(1, 2);
00F3A328 push 2
00F3A32A push 1
00F3A32C call func (0F32063h)
00F3A331 add esp,8
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。