• 关于溢出的总结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,成功越界赋值。
     
     
     
  • 相关阅读:
    IOS debug网络PonyDebugger 实践篇
    基于S7-200的PLC对里程轮(增量式码盘)解码的应用
    SICP 习题 (1.14)解题总结
    TQ210裸机编程(2)——LED流水灯
    DP练习(初级):ZigZag
    java 十六进制数的转换
    Oracle DB 执行表空间时间点恢复
    html中文乱码(解决办法)
    html的列表
    MySQL的模糊搜索
  • 原文地址:https://www.cnblogs.com/HYWZ36/p/10298609.html
Copyright © 2020-2023  润新知