Salve...
Ho scritto questa funzione che in teoria deve prendere in input una stringa mettendola nell'indirizzo di memoria passato alla funzione tramite il registro ebx, la lunghezza è passata con il registro cx!! La stringa deve terminare con i caratteri di fine stringa 0x0A, 0x0D... Quindi la lunghezza della stringa è il valore di cx meno due.... Io non capisco perché quando uso l'indirizzamento indiretto sul registro eax per inserire i valori di fine stringa il programma va in segmentetion fault:
codice:
cmp $2, %cx
jb return
cmp $2,%cx
movb $0x0A, (%ebx)
movb $0x0D, 1(%ebx)
jbe return
push %eax
push %ebx
push %ecx
push %edx
subw $2, %cx
movw %cx , var_w
movl %ebx, var_l
movl %ebx, %edi
movl $SYS_READ, %eax
movl $STDIN, %ebx
movl var_l , %ecx
movl $var_w, %edx
int $SYSTEM_CALL_LINUX
xor %eax,%eax
movl var_l, %eax # metto il primo indirizzo in memoria
addl $var_w, %eax # metto la somma
movb $0x0A, (%eax) # <--------
pop %edx
pop %ecx
pop %ebx
pop %eax
Io credo che il problema sia quello in quanto se lo comento funziona (male)... Non so che pesci pigliare....