Traslado (ciencias informáticas)

"El traslado es el proceso de asignar discursos de la carga ante varias partes de [un] programa y ajustar el código y datos en el programa para reflejar las direcciones asignadas."

Un linker por lo general realiza el traslado junto con la resolución del símbolo, el proceso de archivos penetrantes y bibliotecas para sustituir referencias simbólicas o nombres de bibliotecas con direcciones utilizables actuales en la memoria antes de dirigir un programa. Aunque el traslado sea típicamente hecho por el linker en el tiempo de relación, también puede ser hecho en el tiempo de ejecución por un cargador que se traslada, o por el propio programa de marcha.

Procedimiento de traslado

El traslado típicamente se hace en dos pasos:

  1. Cada archivo del objeto tiene varias secciones como código, datos.bss etc. Para combinar todos los objetos a un single ejecutable, el linker combina todas las secciones del tipo similar en una sección sola de ese tipo. El linker entonces asigna discursos del tiempo de ejecución ante cada sección y cada símbolo. A este punto, el código (funciones) y datos (variables globales) tendrá direcciones del tiempo de ejecución únicas.
  2. Cada sección se refiere a uno o varios símbolos que se deberían modificar de modo que señalen a las direcciones del tiempo de ejecución correctas basadas en la información almacenada en una mesa de traslado en el archivo del objeto.

Mesa de traslado

La mesa de traslado es una lista de agujas creadas por el compilador o ensamblador y almacenado en el objeto o archivo ejecutable. Cada entrada en la mesa o "fixup", es una aguja de una dirección en el código del objeto que se debe cambiar cuando el cargador traslada el programa. Fixups se diseñan para apoyar el traslado del programa como una unidad completa. En algunos casos, cada fixup en la mesa es con relación a una dirección base del cero, por tanto el fixups ellos mismos se debe cambiar cuando el cargador se mueve a través de la mesa.

En algunas arquitecturas un fixup que cruza ciertos límites (como un límite de segmento) o esto no se alinea en un límite de la palabra es ilegal y señalado como un error por el linker.

Windows de 16 bites

Las agujas lejanas (agujas de 32 bites con segment:offset, usado para dirigirse al espacio de memoria de 640 KILOBYTES de 20 bites disponible para programas DOS), que señalan a código o datos dentro de DOS ejecutable (EXE) no tienen segmentos absolutos, porque la dirección actual del código/datos depende de donde el programa se carga en la memoria y esto no se conoce hasta que el programa se cargue.

En cambio, los segmentos son valores relativos en DOS archivo de EXE. Estos segmentos se tienen que corregir, cuando el ejecutable se ha cargado en la memoria. El cargador EXE usa una mesa de traslado para encontrar los segmentos que se tienen que ajustar.

Windows de 32 bites

Con sistemas operativo Windows de 32 bites no es obligatorio para proporcionar mesas de traslado a archivos EXE, ya que son la primera imagen cargada en el espacio de direcciones virtual y así se cargarán en su dirección base preferida.

Tanto para DLLs como para EXEs que optan en la Disposición del Espacio de direcciones Randomisation - una técnica de la mitigación de proeza introducida con Windows Vista, las mesas de traslado otra vez se hacen obligatorias debido a la posibilidad que el binario se pueda dinámicamente mover antes de ejecutarse, aunque todavía sean la primera cosa cargada en el espacio de direcciones virtual.

Windows de 64 bites

Dirigiendo binarios de 64 bites natales en Windows Vista y encima, ASLR es obligatorio, y así las secciones de traslado no pueden ser omitidas por el compilador.

Sistemas parecidos a Unix

El ELFO formato ejecutable y TAN formato de la biblioteca compartido usado por la mayor parte de sistemas parecidos a Unix permite definir varios tipos de traslados.

Véase también



Buscar