2011-08-11 28 views
5

Estoy usando objdump para analizar el uso de la memoria de un objeto compartido. Junto con las secciones .data y .rodata, veo una sección .data.rel.ro.¿Para qué se utiliza .data.rel.ro?

¿Alguien sabe para qué se usa esto?

Respuesta

8

he encontrado la respuesta here:

gcc, el enlazador de GNU, y el enlazador dinámico glibc cooperar para poner en práctica una idea de sólo lectura llamado traslados, o RELRO. Esto permite que el enlazador designe una parte de un archivo ejecutable o (más comúnmente) una biblioteca compartida como de solo lectura después de que se hayan aplicado las reubicaciones dinámicas .

Esto se puede utilizar para las variables globales de solo lectura que se inicializan a algo que requiere una reubicación, como la dirección de una función o una variable global diferente. Debido a que la variable global requiere una inicialización en tiempo de ejecución en forma de una reubicación dinámica, no se puede colocar en un segmento de solo lectura. Sin embargo, dado que es declarado constante y, por lo tanto, no puede ser modificado por el programa , el enlazador dinámico puede marcarlo como de solo lectura después de que se haya aplicado la reubicación dinámica .