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

时间:2015-06-16 19:55:26

标签: assembly x86 segmentation-fault mmap

我在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

1 个答案:

答案 0 :(得分:1)

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