2014-10-10 106 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

的原因,故障很可能是继续执行到内存不是有效执行,或者不包含实际代码,而是随机垃圾。很容易想象随机垃圾作为代码执行时会产生一个操作,从而产生段错误。