在Linux 32位x86程序集中显示文本文件的内容

在Linux 32位x86程序集中显示文本文件的内容,linux,assembly,x86,nasm,Linux,Assembly,X86,Nasm,如何在Linux 32位x86程序集(NASM语法)中显示文本文件的内容 提前感谢,我还没有测试过这一点(也不一定是NASM语法),但在x86 Linux机器上应该可以使用以下内容: ; Open file mov ecx,0 ; FILEMODE_R mov ebx,filePath mov edx,01FFh mov eax,5 ;__NR_open int 80h ; syscall mov fileHandle,eax ... ; Read file data mov ebx,

如何在Linux 32位x86程序集(NASM语法)中显示文本文件的内容

提前感谢,

我还没有测试过这一点(也不一定是NASM语法),但在x86 Linux机器上应该可以使用以下内容:

; Open file 
mov ecx,0 ; FILEMODE_R
mov ebx,filePath
mov edx,01FFh
mov eax,5  ;__NR_open
int 80h  ; syscall
mov fileHandle,eax

...

; Read file data
mov ebx,fileHandle
mov ecx,buffer
mov edx,numBytesToRead
mov eax,3  ; __NR_read
int 80h

; Write to STDOUT
mov edx,numCharsToWrite
mov ecx,buffer
mov ebx,1  ; STDOUT
mov eax,4 ; __NR_write
int 80h

; Repeat as many times as necessary

; Close file
mov ebx,fileHandle
mov eax,6 ; __NR_close
int 80h

在终端中使用此选项,例如,./[program name]>destination.txt
我把答案删掉了,因为我误读了这个问题。在此之前,弗兰克·科特勒(Frank Kotler)就此事发表了以下评论(我猜他可能误认为是你的):“回答得好,迈克尔!我唯一建议的是在继续之前确保系统开放成功(eax>0)。@MathewHall:对。为了保持代码简短,我删除了所有的错误检查。当然,人们应该假设任何可能出错的事情最终都会发生,并检查错误。
    SECTION .bss
        fileBuf: resb 1
    SECTION .data
    SECTION .text
        global _start
    _start:

        nop

      read: mov eax, 3 ; sys_read
            mov ebx, 0 ; standard input
            mov ecx, fileBuf
            mov edx, 1
            int 80h
            cmp eax, 0 ; ensure havn't read eof
            je exit

      write:mov eax, 4 ; sys_write
            mov ebx, 1 ; standard output
            mov ecx, fileBuf
            mov edx, 1
            int 80h
            jmp read


     exit: mov eax, 1 ; wrap it up
           mov ebx, 0
           int 80h