#
2
通过gdb调试分析,程序在无线递归调用时,栈空间地址不断向上面写入数据,最终会导致段错误。!
[------------------------------------stack-------------------------------------]
0000| 0xffffcf7c --> 0x804840a (<foo+11>: leave)
0004| 0xffffcf80 --> 0xf7ffd938 --> 0x0
0008| 0xffffcf84 --> 0x0
0012| 0xffffcf88 --> 0xffffcf98 --> 0xffffcfa8 --> 0xffffcfb8 --> 0xffffcfc8 --> 0xffffcfd8 --> 0xffffcfe8 --> 0x0
0016| 0xffffcf8c --> 0x804840a (<foo+11>: leave)
0020| 0xffffcf90 --> 0xffffffff
0024| 0xffffcf94 --> 0xffffcfbe --> 0x10804
0028| 0xffffcf98 --> 0xffffcfa8 --> 0xffffcfb8 --> 0xffffcfc8 --> 0xffffcfd8 --> 0xffffcfe8 --> 0x0
[------------------------------------------------------------------------------]
执行几次之后
[------------------------------------stack-------------------------------------]
0000| 0xffffcf78 --> 0xffffcf88 --> 0xffffcf98 --> 0xffffcfa8 --> 0xffffcfb8 --> 0xffffcfc8 --> 0xffffcfd8 --> 0xffffcfe8 --> 0x0
0004| 0xffffcf7c --> 0x804840a (<foo+11>: leave)
0008| 0xffffcf80 --> 0xf7ffd938 --> 0x0
0012| 0xffffcf84 --> 0x0
0016| 0xffffcf88 --> 0xffffcf98 --> 0xffffcfa8 --> 0xffffcfb8 --> 0xffffcfc8 --> 0xffffcfd8 --> 0xffffcfe8 --> 0x0
0020| 0xffffcf8c --> 0x804840a (<foo+11>: leave)
0024| 0xffffcf90 --> 0xffffffff
0028| 0xffffcf94 --> 0xffffcfbe --> 0x10804
[------------------------------------------------------------------------------]
本文通过gdb调试工具分析了一个程序中无线递归调用导致的段错误问题。详细展示了递归调用过程中栈空间地址的变化,以及如何由于栈溢出引发程序崩溃。

被折叠的 条评论
为什么被折叠?



