堆栈中局部变量的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?