从x86中的特定位置读取文件

问题描述 投票:0回答:2

是否可以从特定的行或字节开始读取文件。目前,我使用此代码读取文件的4个字节:

section .data
    filename db "file.txt", 0

section .bss
    read_data resb 4

section .text
    global _start

_start:
  mov rax, SYS_OPEN
  mov rdi, filename
  mov rsi, O_RDONLY
  mov rdx, 0
  syscall

  push rax
  mov rdi, rax
  mov rax, SYS_READ
  mov rsi, read_data
  mov rdx, 4
  syscall

  mov rax, SYS_CLOSE
  pop rdi
  syscall

此代码始终读取前4个字节,但是我想从文件的其他部分开始读取,例如中间部分。我需要添加或更改什么?

linux assembly file-io x86-64 nasm
2个回答
1
投票

在执行读取之前,您应该执行一次lseek,以便更新文件位置。

有些事情就这样:


1
投票

一个新打开的文件描述符从位置= 0开始。如果继续循环读取相同的How to remove "noise" from GCC/clang assembly output?,则将获得连续的块。 (不过,使用[c0]返回的值作为上限,使用更大的缓冲区(如8kiB并在用户空间中循环dword)!系统调用在CPU时间上非常昂贵。)

© www.soinside.com 2019 - 2024. All rights reserved.