gpt4 book ai didi

linux - 使用linux系统调用 "read"读取文件的一个字符

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:24 26 4
gpt4 key购买 nike

因此,我尝试使用 Linux 系统调用 read with nasm 一次读取一个字符,但无论我指定计数是什么,它都会读取整个文件。我知道 read 需要 3 个参数,第一个是文件描述符,第二个是要写入数据的缓冲区,第三个是要读取的字节数。我有以下内容。我省略了很多代码,因为这只是一个更大项目的一部分

 section .data 
bufsize: db 1

section .bss
buf resb 256

; read the file
mov eax, 3 ; read(
mov ebx, [file_pointer] ; file_descriptor,
mov ecx, buf ; *buf,
mov edx, bufsize ; *bufsize
int 80h ; );

; write to STDOUT
mov edx, eax ; move number of bytes read into edx
mov eax, 4 ; system call for write
mov ebx, 1 ; STDOUT file descriptor
; ecx is already set up. its the buffer
int 80h ; call kernel

但是,当我使用系统调用写入 buf 中的内容时,它会打印出整个文件,而不仅仅是第一个字符。我知道我的文件指针是正确的。我觉得我一定是声明了我的 bufsize 错误。

最佳答案

来自the manpage for read :

ssize_t read(int fd, void *buf, size_t count);

如您所见,第三个参数是要读取的字节数,而不是指向要读取的字节数的指针。

所以代码中的这一行:

mov     edx,  bufsize   ;   *bufsize

应该是:

mov     edx,  [bufsize]   ;   bufsize

bufSize应声明为:

bufsize: dd 1 

(或者你可以直接执行mov edx,1)

关于linux - 使用linux系统调用 "read"读取文件的一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22546830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com