2010-04-28 7 views
1

J'explore les fonctionnements de niveau inférieur du système, et je me demandais comment malloc détermine l'adresse de début du tas. Le tas est-il à un décalage constant ou y a-t-il un appel quelconque pour obtenir l'adresse de départ? La pile affecte-t-elle l'adresse de début du tas?Obtenir l'adresse de début du tas du processus en cours?

Répondre

1

Traditionnellement, le tas commençait juste au-dessus de la section de texte et grandissait; Les trames de pile n'ont pas du tout affecté l'adresse de départ à mesure qu'elles se rapprochent de la page 0 non mappée. Cependant, il est plus courant de nos jours pour

  1. La première adresse à répartition aléatoire, pour le rendre plus difficile pour les exploits de frapper la bonne adresse en mémoire
  2. Le tas pour être non contiguës, comme malloc() habituellement qu'appeler mmap() pour obtenir une adresse partout dans l'espace d'adressage virtuel
+0

Ah, je comprends maintenant. Merci! – beta

1

sbrk renvoie l'adresse de début des octets, il ajoute (ou efface). Dans un nouveau processus sans allocation de segment, le premier appel à sbrk devrait alors renvoyer l'adresse de début de la section "break" du tas. Si je devais parier, c'est ce que implémentations malloc qui utilisent brk/sbrk probablement faire sur leur première exécution.

Questions connexes