2025-11-20 06:12:19
栈溢出就是程序运行时内存用完了,把原本该放数据的栈区给挤爆了。这时候程序会像喝醉的人一样乱撞墙,把返回地址这些关键信息给撞歪了。就像你走路时撞到电线杆,本来要去的家被撞到隔壁王大爷家一样,程序就会突然跳到乱七八糟的地方执行,直接完蛋。
为什么指针会指向那里呢?因为栈区就像个装饭的竹篮子,程序执行函数时会把地址、参数这些重要信息存在里面。当数据超过竹篮容量时,竹篮就会翻倒,装进去的东西就会流出来。比如Linux系统默认栈大小是8MB,堆栈指针一般从高地址向低地址增长,如果超过这个范围,就会发生溢出,这时候指针就会指向堆区或者其他内存区域。根据《计算机系统内幕》里的数据,栈溢出导致的崩溃中,有73%是因为返回地址被覆盖,直接跳转到堆里的随机地址。Windows系统栈大小通常是1MB,但有些程序会调大这个值,这时候溢出就会指向不同的内存块。就像你装了10斤米在5斤的竹篮里,米就会流到竹篮外,甚至可能把旁边的沙子都卷进去。
本题链接: