exe调用某个函数时: int TestFun(int a, int b);
EBP+C: second parameter
EBP+8: first parameter
EBP+4: return address
EBP: previous EBP ===》 旧的ebp值(调用者的ebp)
EBP-4: local variable
EBP-8: local variable
内存地址的增长方向:
对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;
对于栈来讲,它的生长方向是向下的,是向着内存地址减小的方向增长;
(1)cdcall 堆栈资源释放在函数执行外面,一般的c语言调用。 CALL XXX; ADD ESP, xxH
fun xxx(){
push eax
CALL XXX; //xxx(int) ==> cdcall;
ADD ESP,04H // 增加值由xxx函数,入栈参数个数确定;
}
(2)stdcall 在函数的里面释放堆栈,一般的windows API。 CALL XXX;
fun xxx(){
push ebp
mov ebp,esp
/// 插入新代码
...
/// 插入新代码 end;
mov ebp,esp
pop ebp
retn