Pourquoi les adresses de mémoire virtuelle pour les binaires Linux commencent à 0x8048000?
-
24-10-2019 - |
Question
Désassemblage d'un binaire ELF sur un système x86 Ubuntu je ne pouvais pas empêcher de remarquer que le code (.text) section commence à partir de l'adresse virtuelle 0x8048000 et toutes les adresses mémoire inférieures semblent être utilisé.
Cela semble être plutôt inutile et tous Google se présente est soit folklore impliquant STACK_TOP ou la protection contre déréférence de pointeur nULL. Dans ce dernier cas ressemble peut être fixé à l'aide d'une seule page au lieu de laisser un espace de 128Mo.
Alors ma question est - est-il une réponse définitive à la raison pour laquelle la mise en page a été fixé à ces valeurs ou est-ce juste un choix arbitraire
La solution
De la Linkers et chargeurs de livre:
Sur 386 systèmes, l'adresse de base de texte est 0x08048000, ce qui permet une pile assez grande en dessous du texte tout en restant au-dessus de l'adresse 0x08000000, ce qui permet la plupart des programmes d'utiliser une table d'une seule page de second niveau. (Rappelons que le 386, les cartes de chaque table de second niveau 0x00400000 adresses.)