如果问题是毕现的,就非常容易解决。你这里是段错误,不是栈溢出。一般只有深层递归或者大的局部变量才会有栈溢出。根据你的描述,eip被踩掉的可能比较大。另外sigsegv时,查看写入的非法地址和写入的值是什么也很关键。其他的一些建议,可以参考一下:
1. 所有的编译警告都打开。
2. 检查一下calltrace,函数调用合乎逻辑,可以初步判断eip是否被踩写。
3. 尝试所有的不安全的内存操作strcpy, sprintf, memcpy,改用strncpy等安全版本替换。
4. 检查所有的寄存器值是否是合法地址,尝试将它们指向的地址附近的内存dump出来,看是否有熟悉的结构或者字符串。
5. 检查pack字节对齐是否一致,特别是用到第三方库的情况。
6. 是否有整数溢出,signed/unsigned是否有不安全的混用。…