linux之栈溢出分析

打印 上一主题 下一主题

主题 805|帖子 805|积分 2415

示例 2:栈溢出(Stack Overflow)

考虑下面这个递归函数,没有精确的制止条件导致栈溢出:
  1. #include <stdio.h>
  2. void recursive_function(int n) {
  3. char large_array[1024]; <em>// 每次递归调用都会在栈上分配这么多空间</em>
  4. printf("Level %d, address of array: %p\n", n, &large_array);
  5. recursive_function(n + 1);
  6. }
  7. int main() {
  8. recursive_function(1);
  9. return 0;
  10. }
复制代码
编译并运行这个步伐将导致栈溢出,并天生core dump文件。使用GDB查察这个core dump文件,你大概会发现以下信息:
  1. gdb ./a.out core
复制代码
在GDB中:
  1. (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 ()...<em>(gdb)</em> list 1 #include <stdio.h> 2 3 void recursive_function(int n) { 4 char large_array[1024]; // 每次递归调用都会在栈上分配这么多空间 5 printf("Level %d, address of
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天空闲话

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表