【问题标题】:Segmentation Fault reason assembly分段故障原因组装
【发布时间】:2014-10-10 11:49:30
【问题描述】:

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

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

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

int $0x80 #make the system call

【问题讨论】:

  • 你觉得呢?!!11来吧。
  • @unwind 关键是程序可以运行,我知道如果没有退出调用它就无法运行。我只想知道没有电话时会发生什么

标签: assembly x86 segmentation-fault


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    它出错的原因很可能是继续执行到内存中,该内存要么无效,要么不包含实际代码,而是随机垃圾。很容易想象随机垃圾在作为代码执行时会产生一个操作,进而导致段错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多