堆栈中局部变量的X86空间分配

我有一个我在C ++中创建的基本函数:

int __cedcl add(int a, int b){
       return a + b;
}

为了实践,我尽我所能在IDA中扭转了它。 这是我的结果:

push    ebp             ; Store EBP Register
mov     ebp, esp        ; Adjust EBP to be Stack Pointer (Becomes reference to paramaters and such)
sub     esp, 0C0h       ; Allocate C0h Space on Stack
push    ebx             ; Save EBX register
push    esi             ; Save ESI Register
push    edi             ; Save EDI Register
lea     edi, [ebp+var_C0] ; Sets Location to Start Copying at Beginning of Allocated Space
mov     ecx, 30h        ; Stores #Repitions
mov     eax, 0CCCCCCCCh ; Value to store
rep stosd               ; Fill 30h space with CCCCCCCC
mov     eax, [ebp+arg_0] ; Store Argument 1 in EAX Return Register
add     eax, [ebp+arg_4] ; Add argument 2 to EAX Return Register
pop     edi             ; Restore EDI Register
pop     esi             ; Restore ESI Register
pop     ebx             ; Restore EBX Register
mov     esp, ebp        ; Restore Stack Pointer
pop     ebp             ; Restore Base Pointer
retn                    ; Return

然而,我很困惑的是,为什么当没有使用本地变量时,它在堆栈中保留0x30空间,因为它只是利用EAX寄存器,因为它可以使用返回寄存器执行必要的操作。 另外,它为什么默认存储未在函数中使用的寄存器的值。 即。 ebx,esi和edx注册?

如果有人能够澄清这些问题,或者注意到我发现在发现功能时发生的任何错误,我将不胜感激。 谢谢!

链接地址: http://www.djcxy.com/p/84355.html

上一篇: X86 Allocation of Space on Stack for Local Variables

下一篇: Why is ebx saved in the stack frame of a simple function, calling gets?