c语言数组越界返回地址覆盖反汇编分析

#include <stdio.h>

void helloworld()
{
    printf("hello worldn");
}

// 返回地址覆盖
void fun()
{
    int i;
    int arr[5] = {0,1,2,3,4};
    arr[6] = (int)helloworld;
}

// 数组越界
void fun1()
{
    int i;
    int a[5] = {1};
    for(i=0; i <= 5; i++)
    {
        a[i] = 4;
        printf("i=%dn", i);
    }
}

int main(int argc, char const *argv[])
{
    fun1();
    return 0;
}

数组越界