2014-10-10 52 views
-2

我想了解我的程序中的分段故障背後的原因。 我故意評論退出系統調用,以便程序不會終止。這是我程序中的最後一行代碼。 爲什麼這裏出現分段錯誤的確切原因是什麼?分割故障原因程序集

(我認爲代碼是在這裏不相關)

編輯: 行的代碼負責的退出代碼:

int $0x80 #make the system call

+0

你想什麼?!! 11來吧。 – unwind 2014-10-10 11:51:26

+1

@順便說一句,該程序的工作原理,我知道它不會沒有退出呼叫工作。我只想知道沒有電話會發生什麼 – akalikin 2014-10-10 11:54:09

回答

3

內存總是包含一些值(即使只是零),並且處理器將嘗試執行那些字節作爲指令。字節可能沒有意義(非法指令)或指令本身可能導致錯誤。如果您碰巧有有效的說明不會導致錯誤,那麼您最終會打到未映射的頁面,然後您將收到錯誤。如果你非常幸運,那麼垃圾代碼可能會有一個無限循環(或者一個退出系統調用;)),在這種情況下你不會出錯。

3

的原因,故障很可能是繼續執行到內存不是有效執行,或者不包含實際代碼,而是隨機垃圾。很容易想象隨機垃圾作爲代碼執行時會產生一個操作,從而產生段錯誤。