zoukankan      html  css  js  c++  java
  • 逆向-数组-缓冲区溢出的解析

    程序如下,由滴水逆向的老师提供:

    #include <windows.h>
    #include <stdio.h>
    void Fun()
    {
        while(1)
        {
            printf("你好
    ");
        }
    }
    int check()
    {
        int arr[8];
        arr[9]=(int)&Fun;
        return 0;
    }
    int main()
    {
        check();
        getchar();
        return;
    }

    暑假好好复习了数据结构和汇编,学了点逆向再来看这个题目

    1.首先数组是可以越界访问的,arr[9]不会报错

    2.每次执行函数,会提升堆栈,把变量存入提升的堆栈中

    3.但是如果存储内容溢出了提升的堆栈,会覆盖下面的值,即存储的EBP指针的原来地址等内容

    4.程序结束时,进行堆栈平衡,导致返回地址出错,返回其他指令的地址,执行其他命令

    以上大致就是缓冲区溢出的原理。

    查看汇编代码:

    中间一堆jmp,最后看见关键的:

    进而最后程序出错,无法停止

  • 相关阅读:
    Git+GitHub+SaltStack
    系统运维
    Linux之Ubuntu
    TCP/IP 必知必会的十个问题
    Github常见操作和常见错误!
    Git钩子:自定义你的工作流
    Spring 梳理
    Spring 梳理
    Spring 梳理
    Spring boot 官网学习笔记
  • 原文地址:https://www.cnblogs.com/echoDetected/p/13556791.html
Copyright © 2011-2022 走看看