Ecco alcuni codici:
#include <stdio.h>
#include <string.h>
char globalbuf[256];
void function(char *argv) {
char localbuf[256];
strcpy(localbuf, argv);
strcpy(globalbuf, localbuf);
printf("localbuf addr: %p globalbuf addr: %p\n", localbuf, globalbuf);
}
int main(int argc, char **argv) {
function(argv[1]);
return 0;
}
Stavo esaminando ASLR e come funziona. Altre informazioni su OS e compilatore
gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
Linux 3.5.0-32-generic #53-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux
Quindi quando eseguo questo codice, vedo un costante localbuf indirizzo. Il che è perfettamente soddisfacente visto che l'ASLR è abilitato e impostato sulla modalità Full Randomized . Ma l'indirizzo globalbuf rimane sempre lo stesso. So che le variabili globali e statiche non inizializzate fanno parte della sezione BSS; e quindi presumo che le sezioni BSS, Testo e Dati non vengano randomizzate da ASLR.
È corretto? Se non mi collego a un carta . Pagina 2, ultimo paragrafo si riferisce a ciò che sto suggerendo qui.
Come ho capito, ogni processo ha le sue sezioni / aree stack, heap, testo, bss e dati, quindi ogni volta che viene generato un processo, un indirizzo casuale viene assegnato al puntatore base e tutto il resto è solo un offset da esso. Se questo è il caso, cosa viene stampato per globalbuf , è l'offset ?. Come posso trovare l'indirizzo effettivo di globalbuf ?