0X0001:函数调用
int func_b(int b1,int b2)
{
int var_b1,var_b2;
var_b1 = b1+b2;
var_b2 = b1-b2;
return var_b1 * var_b2;
}
int func_a(int a1,int a2)
{
int var_a;
var_a = fuc_b(a1+a2);
return var_a;
}
int main(int argc,char** argv,char **envp) //32位参数在栈上,逆向压参,后将call main的下一条指令压栈(作为返回地址)
{
int var_main; //保存ebp后,移动esp,建立空间,后已ebp作为基址(新的),保存局部变量(local variable),形式参数如3,4(逆向压参)
var_main = func_a(4,3);
return 0;
}
main(call)->fuc_a(call)->fuc_b(形成连续增长式栈空间)
int main()
{
welcome();//main->welcome()[welcome结束后栈清空]
log();//之后再开辟log()栈空间[在log无参数的状态下两者同ebp] main->log()
} //来自pwnable.kr(passcode)的思考