从文件中读取 Asm x86 分段错误

Asm x86 segmentation fault in reading from file

我在 loop2 的第 5 行收到分段错误。这是我的代码的一部分,它逐字节地从映射文件中读取值。 你能告诉我我做错了什么吗?

.global _start
_start:
    mov ,%rax
    mov 16(%rsp),%rdi
    mov ,%rsi
    syscall 

    cmp [=10=],%rax
    jl exit
1:
    mov %rax,%r8
    mov ,%rax
    mov [=10=],%rdi
    mov 96,%rsi
    mov [=10=]x3,%rdx
    mov [=10=]x1,%r10
    mov [=10=],%r9
    syscall

    mov [=10=],%r10
loop2:
    mov (%rax,%r10,1),%r9b
    cmp ,%r9
    je 2f

    sub ,%r9b
    mov %r9b,(%r8,%r10,1)

    inc %r10
        jmp loop2
2:
    mov %r10,%rcx
    dec %r10

程序崩溃时 R8 中的值是 open 系统调用返回的文件描述符。它的值可能是 3,这不是一个有效地址。您需要将这些值存储在您已正确分配的内存范围内。您可以在程序的 .bss 部分创建缓冲区或使用 brk 系统调用动态分配内存。