2010-03-17 20 views

Respuesta

52

PIE es apoyar en archivos ejecutables.

Antes de la creación del modo de PIE, ejecutable del programa podría no ser colocado en una dirección aleatoria en la memoria, sólo el código independiente de posición (PIC) las bibliotecas dinámicas podrían reubicarse en un desplazamiento aleatorio. Funciona muy parecido a lo que PIC hace para librari dinámico es, la diferencia es que no se crea una Tabla de vinculación de procedimientos (PLT), sino que se usa la reubicación relativa de PC.

Después de habilitar la compatibilidad de PIE en gcc/linkers, el cuerpo del programa se compila y se vincula como código de posición independiente. Un vinculador dinámico realiza el proceso de reubicación completo en el módulo de programa, al igual que las bibliotecas dinámicas. Cualquier uso de datos globales se convierte en acceso a través de la Tabla de Compensaciones Globales (GOT) y se agregan las reubicaciones GOT.

PIE se describe bien en this OpenBSD PIE presentation.

Se muestran los cambios a las funciones in this slide (PIE vs PIC).

x 86 pic vs pastel

variables y funciones globales locales están optimizados en el pastel de

variables y funciones globales externas son iguales que el Pic

y en this slide (PIE vs Antiguo- vinculación estilo)

pastel x86 vs no-flags (fijo)

variables y funciones globales locales son similares a

variables globales externos fijos y funciones son iguales que el Pic

Nota, ese pastel puede ser incompatible con -static

+2

También en Wikipedia: http: //en.wikipedia.org/wiki/Position-independent_code#Position-independent_executables – osgx

+3

¿Por qué -pie y -static son compatibles con ARM y NO son compatibles con x86? Mi pregunta ASÍ: http://stackoverflow.com/questions/27082959/gcc-static-and-pie-are-incompatible-for-x86 – 4ntoine

Cuestiones relacionadas