Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Buffer overflow c/c++
Forum - C/C++ - Buffer overflow c/c++

Avatar
luca_c (Normal User)
Newbie


Messaggi: 5
Iscritto: 02/07/2009

Segnala al moderatore
Postato alle 23:06
Giovedì, 02/07/2009
Buongiorno a tutti,
vorrei chiedervi come individuare negli array del C/C++ il buffer overflow.

Per esempio:

char c[8];
int x[5][6][10];

c[20] = 'z';
x[4][7][4] = 11;

Esiste un metodo o un programma, compilatore per effettuare tale controllo facilmente.

(Inserisco questa domanda sia nel forum del C sia del C++)

    Grazie

PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 4:52
Venerdì, 03/07/2009
Testo quotato

Postato originariamente da luca_c:

Buongiorno a tutti,
vorrei chiedervi come individuare negli array del C/C++ il buffer overflow.

Per esempio:

char c[8];
int x[5][6][10];

c[20] = 'z';
x[4][7][4] = 11;

Esiste un metodo o un programma, compilatore per effettuare tale controllo facilmente.

(Inserisco questa domanda sia nel forum del C sia del C++)

    Grazie


Intendi dire errore out of range ?
Si risolve utilizzando le strutture dati della STL.
Puoi anche utilizzare le asserzioni controllando che l'indice sia nel range.

Se devi eseguire un controllo temporaneo (ad esempio per testare l'applicativo) ti consiglio di utilizzare le asserzioni:
Codice sorgente - presumibilmente C/C++

  1. #define MAX 20
  2. [...]
  3. int vettore[MAX];
  4. assert (i < MAX && i >= 0);
  5. vettore[i] = valore;


Altrimenti passa ai contenitori della STL

Ultima modifica effettuata da Xaratroom il 03/07/2009 alle 4:54


bool Woman::makeYourselfBetter() {
       goto bathroom;

bathroom:
       while (1);

       return this->_isGoodResult();
}
PM Quote
Avatar
luca_c (Normal User)
Newbie


Messaggi: 5
Iscritto: 02/07/2009

Segnala al moderatore
Postato alle 22:22
Sabato, 18/07/2009
Ti ringrazio per la risposta,
intendo errori del tipo:

int x[10][10][10];
int ii;

...

ii = 10;

x[0][ii][0] = 9;

In fase di run time non si riesce ad individuare l'errore.

Purtroppo sono costretto ad usare gli array standard del C in quanto programmo sistemi embedded, dove ci viene esplicitamente prescritto di usare array standard.

Ma credo di aver trovato la soluzione al problema.
Ho trovato il programma Bugfihter sul sito www.bugfighter-soft.com che fa proprio questo.

E' indipendente dal sistema operativo e dal compilatore, in quanto si tratta di un parser che converte il sorgente C/C++ in un nuovo sorgente ricompilabile.

Il programma ottenuto, in fase di runtime, scrive sul file errors.txt eventuali errori.

L'ho provato con il Visual C++ e funziona.

   Grazie

     Ciao










PM Quote