[Nasm][Linux] Open and read
Bonjour,
je débute un peu en assembleur et j'essaie de faire un programme qui lit le début d'un fichier dont le nom est entré par l'utilisateur.
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| ; Instruction de compilation :
; nasm -f elf dcat.asm
; ld -o dcat dcat.o
segment .data ; variables initialisées constantes
buflen: dd 254
readlen: dd 254
err: dd 128
error: db 'error open',10
errorLen: equ $-error
segment .bss
buf: resb 254
read: resb 254
lerr: resb 128
segment .text ; équivalent de main() mais c'est pas une fonction
global _start
errorf: ;si on ne peut pas ouvrir le fichier
mov eax,4 ;syscall 4 => write
mov ebx,1 ;1 => STDOUT
mov ecx,error ;what ? error
mov edx,errorLen ;length? errorLen
int 80h ;execute
mov eax,1 ;syscall 1 => exit
mov ebx,0 ;error code => 0
int 80h ;execute
ret ;end
readf: ;si on a ouvert le fichier
mov ebx,eax ; move file descriptor in ebx
mov eax,3 ;syscall 3 => read
mov ecx,read ;put in read
mov edx,readlen ;length
int 80h ;execute
mov eax,4 ;syscall 4 => write
mov ebx,1 ;where? STDOUT
int 80h ;execute
;ecx , edx already defined
mov eax,1 ;syscall 1 => exit
mov ebx,0 ;error code
int 80h ;execute
ret ;ret
_start: ; programme en lui même
mov eax,3 ;syscall 3 => read
mov ebx,0 ; Where? STDIN
mov ecx,buf ;save in buf
mov edx,buflen ;length of buf
int 80h ;execute
mov eax,5 ;syscall 5 => open
mov ebx,buf ;open what ?buf
mov ecx,0 ;flag => read only
int 80h ;execute
test eax,-1 ; an error ?
je errorf ;yes jump to error
jne readf ;no read file |
Je n'ai aucune sortie comme quoi le fichier n'existe pas (qu'il existe ou pas d'ailleurs).
Enfin bref je ne sais pas où est mon erreur.
Pouvez-vous m'aider ou me mettre sur la voie ?
Merci
++