我在loop2的第5行收到分段错误。这是我的代码的一部分,它是逐字节地从mmapped文件中读取值。 你能告诉我我做错了吗?
.global _start
_start:
mov $2,%rax
mov 16(%rsp),%rdi
mov $02,%rsi
syscall
cmp $0,%rax
jl exit
1:
mov %rax,%r8
mov $9,%rax
mov $0,%rdi
mov $4096,%rsi
mov $0x3,%rdx
mov $0x1,%r10
mov $0,%r9
syscall
mov $0,%r10
loop2:
mov (%rax,%r10,1),%r9b
cmp $32,%r9
je 2f
sub $48,%r9b
mov %r9b,(%r8,%r10,1)
inc %r10
jmp loop2
2:
mov %r10,%rcx
dec %r10
答案 0 :(得分:1)
程序崩溃时R8中的值是open syscall返回的文件描述符。它的值大概是3,这不是一个有效的地址。您需要将这些值存储在已正确分配的内存范围内。您可以在程序的.bss部分中创建缓冲区,或使用brk系统调用动态分配内存。