Gestione errori

di il
9 risposte

Gestione errori

Salve a tutti
sapete come intercettare gli errori direttamente in assembler x86 32 bit ?
l'errore che vorrei intercettare e quello dello sfondamento dei vettori.
ringrazio in anticipo tutti coloro che mi aiuteranno.

9 Risposte

  • Re: Gestione errori

    Non puoi sempre... Devi scrivere codice seguendo precisi criteri
  • Re: Gestione errori

    Cosa sarebbe lo "sfondamento dei vettori" ?
  • Re: Gestione errori

    Grazie per la risposta
    x sfondamento dei vettori intendo: quando l'indice del vettore va oltre le sue dimensioni.
    esempio
    
    .data
    vett db 8
    vett2 db 9
    .code
    mov ecx,9
    xor esi,esi
    xor edi,edi
    loop1: mov al,byte ptr vett[esi] ; vorrei intercettare e gestire questo errore prima che lo faccia il sistema! 
    mov byte ptr vett2[edi],al
    inc edi
    inc esi
    loop loop1
    
    in questo esempio è ben palese l'errore e sarebbe molto facile da correggere vedendo il listato ma in altri casi non è cosi evidente.
    ecco il motivo della richiesta.
  • Re: Gestione errori

    Non puoi perché il programma può tranquillamente accedere a memoria allocata al processo senza accorgersene.
  • Re: Gestione errori

    So che cerco di arrampicarmi sugli specchi!
    ma non c'è un sistema per calcolarsi prima le dimensioni effettive dei vettori?
    cosi da poterlo testare?
  • Re: Gestione errori

    Lo devi fare tu nel codice!

    Tu sai sempre la lunghezza (in byte o come vuoi tu) del vettore (basta usare l'indirizzo di inizio del vettore e quello di fine).
    Controlla che l'indice, nella tua funzione, non superi questo valore massimo.
  • Re: Gestione errori

    Non è cosi semplice perchè se il dato viene passato per puntatore da un altra routine allora non ho modo di saperlo!
    e non posso neanche scorrere tutto il vettore prima per calcolarlo perchè se la stringa contiene degli 0 mi darebbe un valore sbagliato che non rappresenterebbe la reale dimensione del vettore.
  • Re: Gestione errori

    smalldragon ha scritto:


    Non è cosi semplice perchè se il dato viene passato per puntatore da un altra routine allora non ho modo di saperlo!
    In questo caso DEVI passare anche il numero massimo di byte da trattare. Vedi le funzioni "sicure" del C ( ad esempio strcpy_s ).

    In parole povere, DEVI saperlo tu.
  • Re: Gestione errori

    Ok grazie
Devi accedere o registrarti per scrivere nel forum
9 risposte