C Calling Convertion
C与汇编代码的调用约定:
1. 后面的参数先入栈并且调用者负责还原堆栈
2. 被调用者通常要保持寄存器EBX,ESI,EDI,EBP,CS,DS,SS,ES的值,意思是如果使用了这些寄存器,要在返回时还原.
3. 返回值整型使用EAX,64位使用EDX:EAX,指针使用EAX,浮点型使用st0.
4. 汇编的函数标号名根据编译环境使用或不使用下划线, GCC是不需要.
典型代码,
Caller
push dword 1
call subprogram
add esp,4
Callee
subprogram label:
push ebp
mov ebp,esp
;code
mov esp,ebp
pop ebp
ret