Sto provando a eseguire il debug di un programma che ho scritto. Secondo il debugger, un particolare void *
contiene il valore 0x804b008. Mi piacerebbe essere in grado di dereferenziare questo valore (trasmetterlo a un valore int *
e ottenere il suo valore).Posizione memoria arbitraria con dereference in C
Ricevo un errore di segmentazione con questo codice. (Il programma con il void *
è ancora in esecuzione in background btw - è 'pausa')
#include <stdio.h>
int main() {
int* pVal = (int *)0x804b008;
printf("%d", *pVal);
}
Posso capire perché essendo in grado di deferenza qualsiasi punto in memoria potrebbe essere pericoloso, quindi forse è per questo questo non sta funzionando .
Grazie!
Ho letto un po 'di sviluppo del sistema operativo, quindi credo di capire un po' di cosa stai parlando. Questa memoria virtuale si trova nella RAM, semplicemente mappata a un diverso schema di indirizzamento o qualcos'altro? Grazie ancora. EDIT: Ho risposto alla mia domanda prima ancora che me lo chiedessi! – Tyler
La memoria virtuale significa semplicemente che per quanto riguarda la scrittura di un programma, si dispone di uno spazio di memoria contiguo. Il sistema operativo gestisce tutta la potenziale frammentazione della memoria per te. –
Grazie. Ho raccolto tanto. Ero più interessato a * come * è implementato a livello di sistema operativo. http://en.wikipedia.org/wiki/Virtual_memory#Page_tables sembra essere come è fatto. Grazie – Tyler