zoukankan      html  css  js  c++  java
  • 栈帧的不安全程序示例

    栈帧简述

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

  • 相关阅读:
    DOM
    笔试题
    小案例
    前端基础面试题
    2048小游戏
    JS原型与构造函数
    String字符串和正则表达式
    数组
    MySQL_PHP学习笔记_2015_0906_使用PHP模板
    MySQL_PHP学习笔记_2015_0614_PHP传参总结_URL传参_表单传参
  • 原文地址:https://www.cnblogs.com/lang5230/p/5590261.html
Copyright © 2011-2022 走看看