Sto giocando con le vulnerabilità del buffer e dell'heap overflow, e va benissimo sfruttare le cose quando si ha il codice sorgente e si possono vedere tutte le variabili, le loro dimensioni e valori, ecc. Ma, cosa succede se ho solo il programma compilato e ho bisogno di trovare una dimensione di un array. Ad esempio, se prendiamo il seguente programma di esempio, che ha dichiarato alcune variabili e un array, e in una fase successiva dell'esecuzione, l'array viene passato ad un'altra funzione.
int main(int argc, char **argv)
{
char test;
char arr[100];
double someVar;
// Somewhere in the main call another function with array
myFunc(arr);
...
}
Se non avessi il codice sorgente, ma sapevo che l'array è passato da qualche parte (gueesable), come andrei a determinare la dimensione dell'array? Voglio dire, posso sempre provare a scrivere qualcosa come uno script in cui passo sempre argomenti più grandi e grossi al programma dalla riga di comando, e vedere dove fallisce, ma questo non è un approccio molto pratico (secondo me). Suppongo che il reverse engineering possa fornire alcune informazioni, ma in che modo esattamente? Gdb può anche fornire qualcosa di utile? Voglio dire quali sarebbero i metodi per determinare la dimensione della matrice se il codice sorgente non è noto?