手机版

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

发布时间:2021-06-05   来源:未知    
字号:

网络 电子商务 编程

程。

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

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文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)