運行時錯誤?
如果問題是畢現的,就非常容易解決。你這里是段錯誤,不是棧溢出。一般只有深層遞歸或者大的局部變量才會有棧溢出。根據你的描述,eip被踩掉的可能比較大。另外sigsegv時,查看寫入的非法地址和寫入的值是什么也很關鍵。其他的一些建議,可以參考一下:
1. 所有的編譯警告都打開。
2. 檢查一下calltrace,函數調用合乎邏輯,可以初步判斷eip是否被踩寫。
3. 嘗試所有的不安全的內存操作strcpy, sprintf, memcpy,改用strncpy等安全版本替換。
4. 檢查所有的寄存器值是否是合法地址,嘗試將它們指向的地址附近的內存dump出來,看是否有熟悉的結構或者字符串。
5. 檢查pack字節對齊是否一致,特別是用到第三方庫的情況。
6. 是否有整數溢出,signed/unsigned是否有不安全的混用。...
上一篇圈織怎么織菠蘿花
下一篇c語言乘法器函數原型