本文简单的mark一下栈溢出以及其可能导致的core错位,栈溢出的时候, gdb的报错是不准确的。
今天在写程序的时候,发现了一个栈溢出的问题,程序本身如下:
void fn2(string str){
}
void fn1(){
const char* str = NULL;
2 => fn2(str);
}
void fn(){
1 => string temp("aaa");
fn1();
}
无论是vsvocde的报错还是gdb的core,错误没有报错在 2=>处,而是报在了1=>处, 而1肯定是没有问题的,后来一路打log下去才发现是哪里真的报错
通过gdb去查看反汇编的报错堆栈的时候,明显可以看到,其报错堆栈的最后指向的运行代码是__stack_chk_fail, 这应该是gdb本身的bug
=> 0x00007faf30ed990b <+1755>: callq 0x7faf30ed3750 <__stack_chk_fail@plt>
https://www.jianshu.com/p/47d484b9227e
原文:https://www.cnblogs.com/ishen/p/12715143.html