
Envoyé par
dva2tlse
ma question concerne une machine sun fire 68000 sous sunOS 5.8; je voudrais savoir comment faire pour convertir une adresse kernel virtuelle qui vaut ADDR en une adresse physique que je note addr.
Ce n'est absolument pas une question de langage C, mais de programmation système sous ton OS particulier.
http://www.developpez.net/forums/f55...tres-systemes/
Et ensuite, comment faire pour voir, en C, ce que contient cette case mémoire ?
Si il s'agit d'une adresse, elle doit être dans un pointeur. On utilise alors printf() avec "%p" et le cast (void *)
Exemple :
1 2 3 4 5 6 7 8 9 10
| #include <stdio.h>
int main (void)
{
int x;
int *p = &x;
printf ("p = %p\n", (void *) p);
return 0;
} |
1 2 3 4
| p = 0022FF44
Process returned 0 (0x0) execution time : 0.033 s
Press any key to continue. |
Selon ce que je sais du contenu de la case mémoire, et éventuellement des suivantes, je compte utiliser un des pointeurs suivants :
int *pint;
float *pfloat;
long *plong;
long long *pll;
Mais comment faire pour donner au pointeur que j'utilise la valeur addr précédemment déterminée ?
Suffit il de faire (par exemple) pfloat=addr;
Cette manière d'initialiser un pointeur ne fait pas partie des manières décrites par le langage C. Le comportement est donc indéfini.
Ce peut être techniquement possible, mais rien ne dit que le résultat sera valide. Je n'ai pas bien compris ce que tu cherches à faire, mais les OS modernes interdisent à un processus d'accéder aux données d'un autre processus.
Et ensuite pour le déréférencer et voir le contenu de addr, puis je faire ceci :
printf("addr vaut %d et contient %f.\n", addr, *pfloat);
printf("addr vaut %p et contient %f.\n", (void *) pfloat, *pfloat);
mais sans aucune garantie de fonctionnement, notamment si la valeur de addr appartient à un autre processus...
Partager