0


linux之栈溢出分析

示例 2:栈溢出(Stack Overflow)

考虑下面这个递归函数,没有正确的终止条件导致栈溢出:

#include <stdio.h>
 void recursive_function(int n) {
 char large_array[1024]; *// 每次递归调用都会在栈上分配这么多空间*
 printf("Level %d, address of array: %p\n", n, &large_array); 
recursive_function(n + 1); 
} 

int main() {
 recursive_function(1);
 return 0;
 }

编译并运行这个程序将导致栈溢出,并生成core dump文件。使用GDB查看这个core dump文件,你可能会发现以下信息:

gdb ./a.out core

在GDB中:

(gdb) bt#0 0x00005555555546ba in recursive_function (n=16382) at stackoverflow_example.c:6#1 0x00005555555546d4 in recursive_function (n=16383) at stackoverflow_example.c:7#2 0x00007ffff7dfbef7 in __libc_start_main (main=0x555555554640 <main>, argc=1, argv=0x7fffffffdf98, init=<optimized out, fini=<optimized out, rtld_fini=<optimized out, stack_end=0x7fffffffdf88) at ../csu/libc-start.c:310#3 0x000055555555452a in _start ()...*(gdb)* list 1 #include <stdio.h> 2 3 void recursive_function(int n) { 4 char large_array[1024]; // 每次递归调用都会在栈上分配这么多空间 5 printf("Level %d, address of

本文转载自: https://blog.csdn.net/hebtu666/article/details/140303174
版权归原作者 兔老大RabbitMQ 所有, 如有侵权,请联系我们删除。

“linux之栈溢出分析”的评论:

还没有评论