J'essaie de déboguer un programme que j'ai écrit. Selon le débogueur, un void *
particulier contient la valeur 0x804b008. J'aimerais pouvoir déréférencer cette valeur (jetez-la à int *
et obtenez-en la valeur).Détection de l'emplacement de la mémoire arbitraire dans C
Je reçois une erreur de segmentation avec ce code. (Le programme avec le void *
est toujours en cours d'exécution en arrière-plan BTW - il est « en pause »)
#include <stdio.h>
int main() {
int* pVal = (int *)0x804b008;
printf("%d", *pVal);
}
Je peux voir pourquoi être en mesure de déférence tout point dans la mémoire pourrait être dangereux si peut-être pourquoi cela ne fonctionne pas .
Merci!
J'ai lu un peu sur le développement du système d'exploitation, donc je crois que je comprends un peu ce dont vous parlez. Est-ce que cette mémoire virtuelle est située dans la RAM - juste mappée à un schéma d'adressage différent ou autre chose? Merci encore. EDIT: J'ai répondu à ma question avant même que je le demande! – Tyler
La mémoire virtuelle signifie simplement qu'en ce qui vous concerne lorsque vous écrivez un programme, vous disposez d'un espace mémoire contigu. Le système d'exploitation gère toute la fragmentation de mémoire potentielle pour vous. –
Merci. Je me suis réuni autant. J'étais plus intéressé par * comment * il est implémenté au niveau de l'OS. http://en.wikipedia.org/wiki/Virtual_memory#Page_tables semble être comment c'est fait. Merci – Tyler