[GCC, Linux] Emulazione read() con assembly inline

di Anonimizzato18939 il
3 risposte
Cercando di replicare la funzione read() (solo che la mia prende solo due parametri) mi sono
imbattuto in un problemino. L'esecuzione del programma mi fa vedere evidentemente che la funzione
non legge ciò che le scrivo ma lo esegue come se fosse un comando. Inoltre controllando con gdb la variabile c
non risulta memorizzato nessun valore ASCII vi allego esecuzione del programma insieme al codice della funzione read()

gnp@gnp:~/./pfbl
7
-14gnp@gnp:~/Scrivania/develop$ 7
7: comando non trovato
gnp@gnp:~/Scrivania/develop$ 

int read_oc(int fd,int c)
{
	int rt=0;
	__asm__(
	"mov $3,%%eax\n"
	"mov %0,%%ebx\n"
	"mov %1,%%ecx\n"
	"mov $1,%%edx\n"
	"int $0x80\n"

	 
	"mov %%eax,%0\n"
	 
	 :"=r"(rt)
	 :"r"(fd),"r"(c)
	 :"%eax","%ebx","%edx","%ecx"
	);

	return rt;

}

int main (int argc, char **argv)
{
	int buff=0;
	
			read_oc(0,buff);
			
			
			
			printf("%i",read_oc(0,buff));
			
}

3 Risposte

  • Sembrerebbe che tu non abbia svuotato correttamente il buffer della tastiera con l'effetto che, all'uscita dal tuo programma, questo venga scaricato dalla console. Ma perchè vuoi usare l'assembly inline ?
  • Perchè amo i compter e vorrei poter capire cme funzionano in tutti gli aspetti. Comunque grazie per la dritta: Mi sapresti dire come poter scaricare il buffer??
  • In realtà quello che stai facendo é un qualcosa di molto sporco che poteva andare bene ai tempi del dos, non sotto Linux!
Devi accedere o registrarti per scrivere nel forum
3 risposte