所以我尝试使用nasm读取linux系统调用一次读取一个文件,但无论我指定的是什么,它都会读取整个文件。 我知道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错误。
答案 0 :(得分:0)
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
)