汇编语言函数调用的疑惑
发布网友
发布时间:2022-05-11 03:11
我来回答
共2个回答
热心网友
时间:2024-02-23 04:39
;这段代码的作用是对局部变量的支持
00401020 55 push ebp ;保存堆栈指针
00401021 8B EC mov ebp,esp ;把esp的值赋给ebp
00401023 83 EC 40 sub esp,40h ;为局部变量留出空间
;保存重要的寄存器
00401026 53 push ebx
00401027 56 push esi
00401028 57 push edi
;处理代码
00401029 8D 7D C0 lea edi,[ebp-40h]
0040102C B9 10 00 00 00 mov ecx,10h
00401031 B8 CC CC CC CC mov eax,0CCCCCCCCh
00401036 F3 AB rep stos dword ptr [edi]
函数中“}”所对应的代码如下:
;恢复关键的寄存器
00401047 5F pop edi
00401048 5E pop esi
00401049 5B pop ebx
;平衡堆栈
0040104A 8B E5 mov esp,ebp
0040104C 5D pop ebp
;返回
0040104D C3 ret
;你是说堆栈的情况吗?
;应该是:(栈顶在上面,在所有压栈操作后)
;EDI 堆栈顶
;ESI
;EBX
;局部变量区(40H大小)
;EBP
;CALL压入的返回地址
;如果有参数就应该在这里
;出栈操作你自己就就知道啦,后面的指令怎么样恢复ESP和平衡堆栈的!
热心网友
时间:2024-02-23 04:39
werwer