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;
    }

  • 相关阅读:
    AssetBundleNote
    UNet笔记
    HololensAR开发设置
    Hololens真机使用Unity开发流程
    数据结构笔记
    解决粘包问题
    使用C#中的Socket进行通讯
    解决Sql注入,防止恶意数据
    110. 平衡二叉树
    104.二叉树的最大深度
  • 原文地址:https://www.cnblogs.com/lang5230/p/5590261.html
Copyright © 2011-2022 走看看