2014-01-15 51 views
0

我對某些東西感到困惑,我是新手,在GNU/Linux上學習程序集,如果你使用了指令並且沒有中斷(終止)程序,它會觸發一個分段錯誤錯誤。
爲了澄清,我爲此製作的程序唯一的作用是通過系統調用退出。當在程序集中不中斷時出現分段錯誤

它爲什麼這樣做?我的意思是,爲什麼當中斷時它不被認爲是「訪問不允許訪問的內存」?

編輯:我沒有試圖做這個事情,這是出了結果混淆的問題,但這裏是代碼:

movl $1, %eax 
movl $2, %ebx 
#int $0x80 (if you remove the comment, it won't trigger a segmentation fault error, even though now we are using registers normally) 
+0

請包括一些代碼給我們你想要做的事情的背景。 – Michael

+0

我不想做任何事情,但我會包含代碼 –

回答

2

我認爲你所看到的是由於程序沒有正確退出而導致的分段錯誤。

一旦開始執行,CPU不知道程序需要多長時間,需要hlt或系統調用來更改控制流並實際退出程序。因此,當您刪除系統調用指令(並因此退出程序)時,CPU將繼續執行。問題是,您沒有指定要執行的內容,而是執行內存中的內容。從那裏,你有兩個可能的結果:一個段錯誤(就像你看到的那樣),因爲CPU增加了一些有效內存點或非法指令,因爲一些內存組合實際上轉化爲無效的操作碼。

+0

現在我明白了,所以這是因爲CPU沒有任何東西在程序計數器中(內存中沒有任何內容),就像試圖訪問一些不存在的東西。 –

+0

這是大概的想法;但是,CPU在程序計數器中仍然有一個地址,但它不是一個有效的地址。 – Michael

相關問題