Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / 栈帧的不安全程序示例

栈帧简述

堆栈(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