eip $pc 下一个要执行的指令地址
esp 栈指针
ebp 桢指针
eax,edx,ecx 寄存器需要调用者负责保护(保存),就是通过入栈来保存
ebx,esi,edi 寄存器需要被调用者负责保护(保存)
在x86体系结构上,本运行模块的GOT表首地址始终保存在%ebx寄存器中
--------------------------------------------------------------------------------------------------------------
push ebp //ebp入栈,esp-4
mov ebp,esp //ebp = esp
and esp,-16 //栈空间16字节对齐
sub esp,32 //esp = esp-32,为栈分配32个字节
mov [esp],eax //把eax的值写入到[esp],前面已经预留了空间(对齐16,预分配32,一共48个字节)
call test //call等价于push eip,jump func_addr 把返回地址入栈,再跳到test函数地址
mov eax,0 //函数返回值
leave //等价于mov esp,ebp 再pop ebp
ret //把返回值出栈,并赋值给eip
------------------------------------------------------------------------------------------------------