• 栈帧的不安全程序示例


    栈帧简述

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

  • 相关阅读:
    hdu 3018
    poj 1833 排列
    poj 1256 Anagram
    CF 548B Mike and Fun
    CF 548A
    【冰茶几专题】F
    【冰茶几专题】C
    535 C.Tavas and karafs
    [WA]cf 534 D. Handshakes
    cf 534C. Polycarpus' Dice
  • 原文地址:https://www.cnblogs.com/lang5230/p/5590261.html
Copyright © 2020-2023  润新知