Agire sui file a basso livello

Stato
Discussione chiusa ad ulteriori risposte.

Apprendista

Utente Silver
4 Maggio 2009
11
7
0
61
Sto studiando l assembly e ho creato prima un file C:
Codice:
#include<stdio.h>
#include<fcntl.h>

int main(void){
int fd;

fd = open("nota.txt", O_CREAT|O_WRONLY|O_APPEND, 1000);
write(fd, "Ciao", 5);
close(fd);
}

e poi volevo creare un programma in assembly che svolgeva le identiche cose di questo in C, ecco il codice :
Codice:
section .data
fd	db	3
nomefile	db	"notasm.txt"
nota	db	"Hello"

section .text
global _start

_start:

mov eax, 5
mov ebx, nomefile
mov ecx, 64
mov edx, 1000
int 0x80

mov eax, 4
mov ebx, fd
mov ecx, nota
mov edx, 5
int 0x80

mov eax, 6
mov ebx, fd
int 0x80

mov eax, 1
mov ebx, 0
int 0x80

Però il risultato non è lo stesso dato che non so come svolgere questa operazione in assembly: 'fd = open('.
Potete aiutarmi a capire come si fa?
 
devi utilizzare le apposite syscall:
Codice:
%define SYS_OPEN     5 ; 5 syscall open
%define SYS_WRITE   4 ; 4 syscall write
%define SYS_READ     3 ; 3 syscall read
%define O_RDONLY    0 ;sola lettura
%define O_WRONLY   1 ;sola scrittura
%define O_RDWR        2;lettura e scrittura

per aprire il file in sola lettura:
Codice:
   mov eax, SYS_OPEN
   mov ebx, filename
   mov ecx, O_RDONLY

dove filename è il nome del file di tipo byte (filename db 'file.txt'),poi per leggere (1 solo byte):
Codice:
   mov ebx, eax
   mov eax, SYS_READ
   mov ecx, text
   mov edx, 1

dove "text" è una variabile o un'allocazione di memoria di 1 byte (ovviamente).
Credo dovrebbe essere tutto...
 
Razor, credo che intendesse come leggere il file descriptor ritornato dalla open().
In questo caso, c'è da tener presente che il valore di ritorno di qualsiasi funzione viene sempre copiato in eax, quindi dopo la chiamata a sys_open il valore di fd sarà lì.
 
Codice:
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6
#define O_WRONLY	     01
http://sprunge.us/MXBW
EDIT: meglio questo http://sprunge.us/FOCM , cioè questo rispetta per filo e per segno quello tuo in C
 
[ot]Malex io so un po di assembly,c'è anche qualche mio programmino stupido sul forum...tipo invio di messaggi sulla porta seriale.[/ot]
 
[ot]La scuola non serve a niente, se vuoi impari a programmare, se non lo vuoi non ti entra in testa. Chiudo solo dicendo che io frequento un ITIS sezione informatica e tutto ciò che so è solo grazie a me e al mio impegno. Vedi l'asm che l'ho imparato solo.[/ot]
 
Stato
Discussione chiusa ad ulteriori risposte.