« il: 30 Novembre 2019, 16:31:29 »
Appresso un esempio pratico per la lettura dei byte nell'area di memoria delle variabili automatiche:
#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.
*/
Registrato
« 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. »