写一个栈溢出的程序

Posted RainDream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写一个栈溢出的程序相关的知识,希望对你有一定的参考价值。

一般栈溢出在无限递归下出现,下面的程序在创建对象时出现栈溢出:

public class Main {
    public static void main(String[] args) {
        A a = new A();
    }
}

class A {
    private A a = new A();
}

不应该是outofmemory吗?栈里只有a这个reference,其引用的对象,以及对象里的a引用的对象都在堆里分配内存?

猜想(毫不负责):

应该是执行new A()时,调用构造函数,而构造函数初始化a需要调用构造函数,函数调用函数就会将函数地址压栈,因为是无限创建对象,无限的调用构造函数,那就无限的压栈,导致Exception in thread "main" java.lang.StackOverflowError。

以上是关于写一个栈溢出的程序的主要内容,如果未能解决你的问题,请参考以下文章

如何解决栈溢出

栈溢出攻击系列:shellcode在linux x86 64位攻击获得root权限固定地址的栈溢出攻击

java栈内存溢出怎么解决

堆栈溢出一般是由啥原因导致的?

java程序内存溢出一般啥原因

缓冲区溢出漏洞实验