【问题标题】:NASM - Segmentation fault in loopNASM - 循环中的分段错误
【发布时间】:2014-02-26 14:08:01
【问题描述】:

我有两个类似的循环,其中我将地址写入 eax,然后从 eax 写入数据段。第一个第一个循环正在工作,第二个循环返回一个段错误。为什么第二个循环错了,第一个没有!?

section .data
n1: db 1
n2: db 1

[...]

n_1_1:
mov eax,one
mov [n1],eax
jmp DIG2

 n_2_1:
 mov eax,one
 mov [n2],eax        ; segfault
 jmp DISP2

【问题讨论】:

    标签: assembly segmentation-fault nasm


    【解决方案1】:

    db 声明了一个 byte(8 位),这不足以容纳 eax(32 位)。声明每个变量,以便它有足够的空间来保存您将尝试写入/读取的最大值。

    例如:

    ; declare n1 and n2 as doublewords with initial values of 1
    n1: dd 1
    n2: dd 1   
    

    至于为什么其中一个崩溃而另一个没有;从您展示的代码中很难说并且不知道执行环境。但是第二次写入将 1 个字节进一步覆盖到未分配的空间中(从外观上看),即使第一次写入没有导致崩溃,这也足以使其崩溃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 2014-01-31
      • 1970-01-01
      • 2013-07-24
      • 2015-01-09
      • 2012-06-26
      相关资源
      最近更新 更多