关于溢出的总结1

  溢出漏洞是一种计算机程序的可更正性缺陷,全名为“缓冲区溢出漏洞”,由程序中某个或某些输入函数对接收数据的边界验证不严密造成的。
  通过数组越界的操作解析缓冲区溢出漏洞。
程序:越界访问值(工具:vs2008)
#include <stdio.h>
#include <stdlib.h>
int main(){
    int a[20];
    int i;
 
    for (i=0;i<20;i++)
        a[i]=i*2;
 
    printf("a[20]=%d ",a[20]);
 
    system("pause");
    return 0;
}
在printf("a[20]=%d ",a[20]);处下断点,调试执行。程序为a[0]-a[19]赋了值,a[20]处于数组外,尝试读取其值。查看EBP=00CEFED0,[EBP-4]=cccccccc,它即为a[20]的值。
退出调试,执行代码,可见a[20]的值为-858993460,使用计算器,可知其16进制为cccccccc,符合预期。
程序:越界赋值(工具:vs2008)
#include <stdio.h>
 
int main(){
    int a[20];
    int i;
 
    for (i=0;i<20;i++)
        a[i]=i*2;
 
    a[20]=1;
    printf("a[20]=%d ",a[20]);
 
    system("pause");
    return 0;
}
分别在a[20]=1;和printf("a[20]=%d ",a[20]);加断点,调试执行。
第一次停留后,EBP=0030FEB0,搜索这个地址,可见内容,【EBP-4】=cccccccc。
执行此语句,可见【EBP-4】=1,成功越界赋值。
 
 
 
原文地址:https://www.cnblogs.com/HYWZ36/p/10298609.html