如何在 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 < source.txt, source 是要从中复制的任何文件....这将逐字节复制..如果您不指定目标文件该程序会将你的文件内容显示到终端,即[程序名称] < source.txt ...
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