È appurato che indirizzi di memoria e, soprattutto, registri, in asm possono contenere vari bytes (e anche qui non mi è chiara una cosa, ma aprirò un altro topic per questo). Quindi se in un programma in C dichiaro e assegno una variabile int con valore 5, disassemblando l’eseguibile compilato da questo codice troverò un registro contenente un indirizzo di memoria che contiene
Ultimamente mi sono messo a studiare i puntatori, e per curiosità sono andato ad esaminare l’asm di un codice simile a questo:
Andando ad analizzare pointer con gdb e usando la funzione address-of viene ovviamente fuori l’indirizzo di memoria “puntato” dal puntatore, ma effettivamente come memorizza quell’indirizzo? Il processore non può memorizzare altri che bit e bytes teoricamente
0x5
.Ultimamente mi sono messo a studiare i puntatori, e per curiosità sono andato ad esaminare l’asm di un codice simile a questo:
C:
#include <stdio.h>
#include <string.h>
int main() {
char str_a[20];
char *pointer;
char *pointer2;
strcpy(str_a, "Hello, World!\n");
pointer = str_a;
printf("%s", pointer);
pointer2 = pointer + 2;
strcpy(pointer2, "y you guys!\n");
printf("%s", pointer2);
printf("%s", pointer);
}
Andando ad analizzare pointer con gdb e usando la funzione address-of viene ovviamente fuori l’indirizzo di memoria “puntato” dal puntatore, ma effettivamente come memorizza quell’indirizzo? Il processore non può memorizzare altri che bit e bytes teoricamente