本人最近正在学习调试技术,此处对栈溢出做一些总结。
gdb的基本使用就不多扯了。
主要针对发行在外的release版本的软件出现问题时的调试。
我发现,只要源码相同,在gdb的命令行下或者开启gdb时,指定的可执行文件是debug版的,是可以显示出正确的符号信息的。这个大大地提高了调试效率。
一般来讲,查看堆栈就是使用bt,这个时候加上bt full会让你更加满意,因为这里面可以显示出局部变量信息。
另一点是查看寄存器中的值,主要是sp和ip。指令:i r
查看内存信息,指令x。x/???这个?代表某种格式,比如x/10xw $sp以十六进制显示栈指针开始的地址10个字节的内容。
i files这个指令可以查看当时文件加载到内存时的映射信息,这对查看栈溢出很有作用,栈这个段一般位于最后面,栈底和sp指针一对比基本就知道是否发生栈溢出了。