Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C] Devo fare un programma che va in segmentation fault!

    Ciao a tutti, domani devo tenere un seminario su gdb, per dare qualche esempio pratico, vorrei mostrare un semplice programmino che va in segmentation fault (errore di accesso alla memoria), così mostro come trovare con gdb l'errore.

    So che la richiesta è un può fuori dal normale (in genere qua si chiede di togliere questi errori!!!)

    Qualche idea su quale programma fare? (magari che abbia anche un senso)

    thanks!

  2. #2
    codice:
     
    int main(void)
    {
        char *s = "stringa"; /* s è un puntatore ad una stringa posizionata nel segmento di sola lettura dell'eseguibile.
                                Quando il programma viene caricato, questo segmento è generalmente mappato dal
                                sistema operativo in una zona della memoria di sola lettura */
    
        *s = 'a';           /* questo tenta di scrivere nella memoria di sola lettura, causando l'errore di segmentazione */
        return 0;
    }
    Fonte
    -----
    101110101011101111100000
    -----

  3. #3
    codice:
    char * stringa=NULL;
    char stringa2[20];
    gets(stringa);    /*questo è un segfault sicuro */
    gets(stringa2);   /*questo pure se superi i 20 caratteri */
    scanf("%s",stringa2); /*idem con patate*/
    così imparano anche a non usare la gets (in assoluto) e la scanf senza specificare un limite di acquisizione di caratteri. Poi ci sarebbe anche il metodo che io uso per vedere se il compilatore sta compilando per davvero
    codice:
    int * s=NULL;
    *s=0;
    ma questo credo che sia veramente troppo banale.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Puoi anche fare un ciclo che scriva dati in un array fin oltre il suo ultimo elemento.
    GreyFox (Linux registered user #435102)
    greyfox.imente.org - GreyFox's shots (photo gallery)
    $ cd /pub
    $ more beer

  5. #5
    Grazie a tutti, ma mi serviva un problema "più concreto", e sopratutto qualcosa che la gcc -Wall non mi avverte già con un warning

  6. #6
    Grazie a tutti, ma mi serviva un problema "più concreto"
    Più concreto di esempi (classici) compilabili e "funzionanti"? Cosa intendi per "concreto"?

    e sopratutto qualcosa che la gcc -Wall non mi avverte già con un warning
    Ho provato a compilare i codici proposti con l'opzione -Wall di gcc senza ricevere alcun warning.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  7. #7
    Attento che, il segmentation fault, NON è garantito. Insomma è una "fortuna" se ti capita quando fai eseguire al tuo programma in azione dal risultato indefinito.

  8. #8
    Originariamente inviato da cicciox80
    Grazie a tutti, ma mi serviva un problema "più concreto"
    Uno dei problemi di sicurezza più concreti di molte applicazioni è il buffer overflow dato dal non fornire buffer di dimensioni adeguate e dal mancato utilizzo di funzioni "sicure" (come la fgets rispetto alla gets).
    Altro esempio:
    codice:
    char stringa[]="Questa è una stringa certamente più lunga di venti caratteri, ne convenite?";
    char buffer[20];
    strcpy(buffer,stringa);
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.