栈帧简述
堆栈(stack):c语言程序运行时必须有的记录调用记录和参数的空间。保存项: 函数调哟能框架 参数传递 返回值保存 提供局部变量一个老司机通过改变栈帧进行开车的故事
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>void Exit(){printf("i am a big bug,老司机
");///老司机调用shell命令开车//其实这里可以做的事情反而有很多种,比如//对用户隐私文件读取,并且在网络上发送。//修改系统哦你配置等,搞蹦系统,删除文件,等等system("sl");exit(10010);}void func(int x,int y){int * p = &x;--p;printf("int Func
");//核心动作就是这里,通过修改栈帧中保存返回值的位置,使得函数不是正常返回,而是进入老司机的工作位置。*p = Exit;}int main(){func(a,b);///程序并没有进行到这里printf("after func()
");return 0;}本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-07/133369.htm