PDA

Visualizza la versione completa : [ASSEMBLY] Errore di input stringa


PeppePes88
30-10-2008, 20:19
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:



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....

:dh: :dh: :dh:

menphisx
30-10-2008, 21:14
E il debugger che dice (compila col flag g) ?

PeppePes88
30-10-2008, 21:24
Sai la cosa pi divertetente che ho gia provato a lanciare il debuger gdb , compilando sia con l'opzione -g sia con gstabs , ma il risultato lo stesso quando do il comando list per poi dopo mettere i breakpoint mi dice :


init.c : no souch file or directory in init.c

Loading