gpt4 book ai didi

linux - nasm,读取系统调用读取缓冲区大小

转载 作者:太空宇宙 更新时间:2023-11-04 09:07:33 27 4
gpt4 key购买 nike

我有以下代码。它工作正常,除了一件事限制了它在其他程序中的使用。当我在调试器中运行它时,Linux 读取系统调用返回的值总是大于指定的缓冲区大小。为什么会这样以及如何解决它,因为它不允许程序在没有段错误的情况下循环遍历缓冲区数组?

    SECTION .data
address dd "log.txt", 0
badf dd "Bad file!",0
buffsize dd 1024
size dd 1024
filedesc dd 0

section .bss
buf resb 1024


SECTION .text
global main
main:
mov ebx, address
mov eax, 5 ; open(
mov ecx, 0 ; read-only mode
int 80h ; );
mov [filedesc], eax
read_loop:

mov ebx, [filedesc] ; file_descriptor,
mov eax, 3 ; read(
mov ecx, buf ; *buf,
mov edx, buffsize ; *bufsize
int 80h ; );
test eax, eax
jz done
js badfile

mov eax, 4 ; write(
mov ebx, 1 ; STDOUT,
mov edx, buffsize
mov ecx, buf ; *buf
int 80h

jmp read_loop
badfile:
mov eax, 4 ; write(
mov ebx, 1 ; STDOUT,
mov edx, 10
mov ecx, badf ; *buf
int 80h

done:
mov eax, 6
mov ebx, [filedesc]
int 0x80


mov ebx,0
mov eax,1
int 0x80

最佳答案

        mov     edx,  buffsize     ;   *bufsize

是错误的,因为 buffsize 声明如下:

        buffsize dd 1024

上面的代码会将buffsize地址 移动到edx。你想要的是:

        mov edx, [buffsize]

这会将存储在 buffsizevalue 移动到 edx

你有一些这样的错误。

关于linux - nasm,读取系统调用读取缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7754542/

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