分段故障原因组装

时间:2014-10-10 11:49:31

标签: assembly x86 segmentation-fault

我试图了解程序中分段错误背后的原因。 我故意评论退出系统调用,以便程序不会终止。这是我程序中的最后一行代码。 为什么这里出现分段错误的确切原因?

(我认为这里的代码无关紧要)

编辑: 负责退出代码的代码行:

int $0x80 #make the system call

2 个答案:

答案 0 :(得分:3)

它出错的原因可能是执行继续进入内存,该内存无法执行,或者不包含实际代码,而是随机垃圾。很容易想象当作为代码执行时随机垃圾可以产生一个操作,从而产生一个段错误。

答案 1 :(得分:3)

内存总是包含一些值(即使只是零),处理器将尝试执行这些字节作为指令。字节可能没有意义(非法指令)或指令本身可能导致错误。如果您碰巧有有效的指令没有导致错误,您最终会点击未映射的页面,然后您将收到错误。如果你非常幸运,垃圾代码可能有一个无限循环(或退出系统调用;)),在这种情况下,你不会得到错误。