2010-03-15 9 views
3

Existe-t-il une liste d'adresses mémoire réservées - une liste d'adresses auxquelles la mémoire d'un programme d'espace utilisateur ne pourrait jamais être allouée? Je réalise que c'est probablement par OS ou par architecture, mais j'espérais que quelqu'un connaîtrait certains des OS et Arches les plus courants. Je ne pouvais creuser un pour quelques versions de Windows:Adresses de mémoire réservées?

pour Windows NT, 2k et XP qui serait:

0x00000000 - 0x0000FFFF -> Page le plus bas est protégée pour simplifier le débogage

0x00001000 - 0x7ffeffff -> zone de mémoire pour votre application

0x7fff0000 - 0x7fffffff -> zone protégée pour empêcher les fonctions de mémoire-d'endommager la partie suivante

0x80 000000 - 0xffffffff -> mémoire où le système y compris les pilotes et ainsi de suite est situé

Quelqu'un sait pour Linux, ou BSD (ou toute autre chose, d'ailleurs)?

Répondre

1

Linux est normalement configuré pour posséder 0xC000000 à 0xFFFFFFFF par noyau. Cela peut être changé (par exemple, la division infâme de 4 Go à 4 Go qui n'en réserve aucune). La glibc est généralement chargée à 0xB000000.

Sous Linux, 0x00000000 peut être demandé par un appel mmap() particulier à moins d'être bloqué par un sysctl de sécurité (ce qui s'est avéré être une mauvaise idée à bloquer).

reguarding NULL allouant:

NULL est seulement explicitement allocatable je suppose donc le programme qui l'a fait a été préparé pour conséquence de le faire. Au moins -fno-delete-null-pointer-checks est nécessaire à GCC pour que le code affecté fonctionne. On me dit que c'est pour émuler le vieux comportement de BSD qui maquait la page zéro là.

+0

Cela m'embrouille un peu - si NULL est allouable, qu'est-ce que cela fait pour tous les programmes qui s'y initialisent? Connaissez-vous de bonnes ressources qui parlent de ce problème? – Nate

+0

Comme c'est fascinant! – Nate