程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 棧幀的不安全程序示例,示例

棧幀的不安全程序示例,示例

編輯:C++入門知識

棧幀的不安全程序示例,示例


棧幀簡述

堆棧(stack):c語言程序運行時必須有的記錄調用記錄和參數的空間。

保存項:

  函數調喲能框架

  參數傳遞

  返回值保存

  提供局部變量

一個老司機通過改變棧幀進行開車的故事

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

void Exit()
{
    printf("i am a big bug,老司機\n");
    ///老司機調用shell命令開車
    //其實這裡可以做的事情反而有很多種,比如
    //對用戶隱私文件讀取,並且在網絡上發送。
    //修改系統哦你配置等,搞蹦系統,刪除文件,等等
    system("sl");
    exit(10010);
}
void func(int x,int y)
{
    int * p = &x;
    --p;
    printf("int Func\n");
    //核心動作就是這裡,通過修改棧幀中保存返回值的位置,使得函數不是正常返回,而是進入老司機的工作位置。
    *p = Exit;
}

int main()
{
    func(a,b);
    ///程序並沒有進行到這裡
    printf("after func()\n");
    return 0;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved