从函数层面看栈溢出

£可爱£侵袭症+ 提交于 2020-03-10 08:38:10

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)的思考
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!