-1

例如,我写了一个代码

.global _start
.data
str:
    .long 0x1
.text
_start:
  mov  $1, %rax         # system call 1 is write
  mov  $0x21, %rdx
  mov  %rdx, 4(%rax)

  mov  $60, %rax        # system call 60 is exit
  xor  %rdi, %rdi       # we want return code 0
  syscall               # invoke operating system to exit

为什么我会收到分段错误?我什么时候使用内存位置?如何使用内存位置?

4

1 回答 1

1

您正在尝试将 rdx 中的值写入内存位置 5。(rax+4,并且 rax 已初始化为 1)。

你是在真机还是模拟器上运行这个程序?

如果您在计算机上运行它,则不能只写入任意内存位置。操作系统会为一个进程分配一定数量的内存,如果进程试图访问超出这个范围的内存,就会导致分段错误。

如果您在模拟器上运行它并且没有操作系统,那也没关系。如果要写入内存,请在数据段中声明一个变量,如下所示:

.data
myvar:
    .long 0x1
.text
_start:
  #....
  mov  %rdx, myvar
  #...
于 2013-03-24T12:55:44.660 回答