第02课:缓冲区溢出原理分析有哪些要点?

2026-05-28 02:560阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2476个文字,预计阅读时间需要10分钟。

第02课:缓冲区溢出原理分析有哪些要点?

创建一个检测缓冲区溢出的程序,以满足达到实验要求。首先编写一个最简单的存在缓冲区溢出的程序。该程序使用VC++6.0编写,并在Windows XP下执行。

创建含有缓冲区溢出隐患的程序

这里我们为了达到实验的要求,先来编写一个最简单的存在缓冲区溢出隐患的程序。这个程序我使用VC++6.0进行编写,并在Windows XP下执行。(这里请大家注意的是,如果你使用的是新版本的VC,由于微软加入了GS机制来防止缓冲区溢出情况的出现,那么本实验就无法实现。)

首先新建一个Win32控制台应用程序,然后输入以下C语言代码:

#include "stdio.h"
#include "string.h"
char name[] = "jiangye";
int main()
{
char buffer[8];
strcpy(buffer, name);
printf("%s\n",buffer);
getchar();
return 0;
}

编译生成Debug版,运行结果如下:

图1

可见程序已经得到了正确的执行与输出。但是我在程序中所创建出来的是一个8字节长度的数组,而我在程序中的输入是7个字节。如果我的输入超过八个字节会怎么样呢?不妨试一下。

这次再次运行程序,尝试输入“jiangyejiangye”,运行结果如下:

图2

可见,程序虽然也能够正确输出,但是却弹出了错误提示对话框。为什么会出现这种情况?我们接下来就来研究一下。

判定main函数的地址

我们首先来研究一下正常的程序(OverrunTest_1.exe)。

阅读全文

本文共计2476个文字,预计阅读时间需要10分钟。

第02课:缓冲区溢出原理分析有哪些要点?

创建一个检测缓冲区溢出的程序,以满足达到实验要求。首先编写一个最简单的存在缓冲区溢出的程序。该程序使用VC++6.0编写,并在Windows XP下执行。

创建含有缓冲区溢出隐患的程序

这里我们为了达到实验的要求,先来编写一个最简单的存在缓冲区溢出隐患的程序。这个程序我使用VC++6.0进行编写,并在Windows XP下执行。(这里请大家注意的是,如果你使用的是新版本的VC,由于微软加入了GS机制来防止缓冲区溢出情况的出现,那么本实验就无法实现。)

首先新建一个Win32控制台应用程序,然后输入以下C语言代码:

#include "stdio.h"
#include "string.h"
char name[] = "jiangye";
int main()
{
char buffer[8];
strcpy(buffer, name);
printf("%s\n",buffer);
getchar();
return 0;
}

编译生成Debug版,运行结果如下:

图1

可见程序已经得到了正确的执行与输出。但是我在程序中所创建出来的是一个8字节长度的数组,而我在程序中的输入是7个字节。如果我的输入超过八个字节会怎么样呢?不妨试一下。

这次再次运行程序,尝试输入“jiangyejiangye”,运行结果如下:

图2

可见,程序虽然也能够正确输出,但是却弹出了错误提示对话框。为什么会出现这种情况?我们接下来就来研究一下。

判定main函数的地址

我们首先来研究一下正常的程序(OverrunTest_1.exe)。

阅读全文