Autore Topic: [C] Leggere nell'area di memoria delle variabili automatiche  (Letto 372 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.269
  • Ne mors quidem nos iunget
    • Mostra profilo
Appresso un esempio pratico per la lettura dei byte nell'area di memoria delle variabili automatiche:

Codice: [Seleziona]
#include <stdio.h>


int c;

int main() {

int i = 0x03020100, n = 0x07060504;
int *p = &i;


for (c=0; c<16; c++) {
printf("%d -  %.2X\n", c, *(((unsigned char *) &i) + c) );
if ((((c+1)%4)==0) && (c<8))
printf("\n");
sleep(1);
}

printf("%p\n", &i);

/* Leggiamo la prima variabile: i */
printf("%x\n", *(int *) *(unsigned long int *) (((unsigned char *) p) + 8) );

/* Leggiamo la seconda variabile: n */
printf("%x\n", *(int *) (*(unsigned long int *) (((unsigned char *) p) + 8) + 4) );

      return (0);

}


/* LEGENDA:
 
   *(((unsigned char *) &i) + c) :: converte l'indirizzo di memoria in un puntatore a carattere
                                    ed aggiunge il valore di "c" all'indirizzo di memoria di "&i".
                                    Quindi lo dereferenzia.
*/
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »