缓冲区溢出攻击的分析及防范策略(3)

时间:2025-03-11

网络 电子商务 编程

程。

这里有一个直观的缓冲区溢出的小例子:

void function(char *str)

{

char buffer[16];

strcpy(buffer, str);

}

Void main()

{

int I;

char buffer[128];

for(I=0; I<127; I++)

buffer[I]=A;

buffer[127]=0;

function(buffer);

printf(―This is a test.\n‖);

}

在函数function中,将一个128字节长度的字符串拷贝到只有16字节长的局部缓冲区中。在使用strcpy()函数前,没有进行缓冲区边界检查,导致从buffer开始的256个字节都将被*str的内容A覆盖,包括堆栈指针和返回地址,甚至*str都将被A覆盖。

再看看堆栈的结构,由于栈式内存分配具有一条指令即可为子程序分配全部局部变量的存储空间的特点,分配和去配的开销极低,高级语言通常在堆栈上分配局部存储空间。同时,堆栈也被用来存放子程序的返回地址。对C语言来说,调用函数的语句f(arg1,arg2,…,argn)被翻译为如下指令:

push argn

…….

push arg1

push n

call f

而函数的入口则翻译为如下入口指令(在Intel X86上)

pushl ebp

mov esp,ebp

sub esp,m #m为f的局部变量的空间大小

1所示:

缓冲区溢出攻击的分析及防范策略(3).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219