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)的思考
来源:https://www.cnblogs.com/zuoanfengxi/p/12453609.html