如何使用内存位置?

时间:2013-03-24 12:08:21

标签: assembly x86-64 gas

我编写了一个代码

.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

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

1 个答案:

答案 0 :(得分:1)

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

您是在真实计算机还是模拟器上运行此程序?

如果您在计算机上运行它, 只能写入任意内存位置。操作系统为进程分配一定量的内存,如果进程尝试访问此范围之外的内存,则可能导致分段错误。

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

.data
myvar:
    .long 0x1
.text
_start:
  #....
  mov  %rdx, myvar
  #...