我编写了一个代码
.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
为什么我会收到分段错误?我何时使用内存位置?我如何使用内存位置?
答案 0 :(得分:1)
您正在尝试将rdx中的值写入内存位置5.(rax + 4,rax初始化为1)。
您是在真实计算机还是模拟器上运行此程序?
如果您在计算机上运行它, 只能写入任意内存位置。操作系统为进程分配一定量的内存,如果进程尝试访问此范围之外的内存,则可能导致分段错误。
如果您在模拟器上运行它并且没有操作系统,那也没关系。 如果要写入内存,请在数据段中声明一个变量,如下所示:
.data
myvar:
.long 0x1
.text
_start:
#....
mov %rdx, myvar
#...