我有两个类似的循环,其中我写一个地址到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
答案 0 :(得分:2)
db
声明字节(8位),这不足以容纳eax
(32位)。声明每个变量,使其有足够的空间来容纳您尝试写入/读取的最大值。
例如:
; declare n1 and n2 as doublewords with initial values of 1
n1: dd 1
n2: dd 1
至于为什么其中一个崩溃而另一个没有崩溃;从您已经展示的代码中可以很难说并且不了解执行环境。但是第二次写入会将1个字节进一步覆盖到未分配的空间(通过它的外观),这可能足以使它崩溃,即使第一次写入没有导致崩溃。