从文件中读取 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 系统调用动态分配内存。
我在 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 系统调用动态分配内存。