¿Por qué las direcciones de memoria virtual para los binarios de Linux comienzan en 0x8048000?

StackOverflow https://stackoverflow.com/questions/2966426

  •  24-10-2019
  •  | 
  •  

Pregunta

Desmontar un binario ELF en un sistema Ubuntu X86 No pude evitar notar que la sección Código (.Text) comienza desde la dirección virtual 0x8048000 y todas las direcciones de memoria inferior parecen no ser utilizadas.

Esto parece ser bastante derrochador y todo lo que Google aparece es folklore que involucra stack_top o protección contra deserencias nulas de pozo. Parece que el último caso se puede solucionar usando una sola página en lugar de dejar un espacio de 128 MB.

Entonces mi pregunta es esta: ¿hay una respuesta definitiva sobre por qué el diseño se ha solucionado a estos valores o es solo una elección arbitraria?

¿Fue útil?

Solución

Desde el Enlazadores y cargadores libro:

En los sistemas 386, la dirección base del texto es 0x08048000, lo que permite una pila razonablemente grande debajo del texto mientras aún permanece por encima de la dirección 0x08000000, lo que permite a la mayoría de los programas usar una sola tabla de página de segundo nivel. (Recuerde que en el 386, cada tabla de segundo nivel mapea las direcciones 0x00400000).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top