1匹黑马 2020-03-29 23:51 采纳率: 66.7%
浏览 176
已采纳

老师们,麻烦帮忙看一下这个C程序!

这是一道缓冲区溢出的题,代码如下:

#include <stdio.h>                    //头文件
#include <windows.h>        


void Fun()                          //定义函数
{
        while(1)                        //无限循环
    {
        printf("奥里给!\n");           //输出内容
    }
}
int check()                 //定义函数
{
    int arr[8];             //定义数组,移动可以存储9个数
    arr[9] = (int)&Fun;     //???这是越界存储了什么,为什么会读出Fun()里的内容
    return 0;
}
void main()                 //程序入口
{   


    check();                //调用函数
    getchar();                //输入内容
    return;                 //程序结束
}


一共四个问题:

  1. 程序运行是如何输出Fun函数里的内容的?
  2. arr[10] = (int)&Fun为什么输出不了Fun()里的内容?

这里的(int)&Fun; 是什么意思?为什么加上它就可以输出Fun()里的内容?

如能解答,万分感谢!

  • 写回答

3条回答 默认 最新

  • qq_33150061 2020-03-30 13:36
    关注

    图片说明
    我给这个数组付了五个值,第一个00000001就是arr[0]的位置,向下数八个到arr[9],正好是函数的返回地址,汇编语言中的ret直接使用这个位置的地址,正好你用&提取了FUN函数的地址,在这里形成了覆盖,ret指令就直接调用了fun函数的起始地址,就奥利给给给给给给了
    ---------老八逆向--------

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛