programas maquina lenguaje instrucciones hechos explicados ensamblador ejemplos desde cero assembler assembly gnu elf

assembly - maquina - programas en lenguaje ensamblador explicados



Símbolos reubicables en formato ELF(lenguaje ensamblador) (3)

ELF no sabe acerca de las instrucciones, per se. Conoce las codificaciones particulares de los desplazamientos de símbolos dentro de las instrucciones. En el ensamblador, necesitaría generar dos registros de reubicación, cada uno con el triplete [dirección, tipo, símbolo] correspondiente para corregir adecuadamente esa parte de la instrucción. El vinculador ni siquiera sabría necesariamente que estos dos registros apuntan a la misma instrucción.

Los tipos de reubicación ELF son completamente dependientes de la CPU (o, para ser más precisos, dependientes de ISA), por lo que es libre de definir las reubicaciones que necesite para una nueva arquitectura.

Es difícil ser más específico sin detalles de la codificación de la instrucción.

Estamos desarrollando un puerto del Ensamblador GNU para una arquitectura de cliente. Ahora el problema al que se enfrenta es que:

Si un operando inmediato a una instrucción es una expresión que involucra más de un símbolo reubicable, ¿cómo se maneja en el archivo de salida en formato elf? ¿Cuál será la información de reubicación producida en tal caso?

Por ejemplo:

j label1 + label2

donde etiqueta1 y etiqueta2 se definen en secciones reubicables, pueden ser las mismas secciones o diferentes secciones reubicables.


Sé Jack sobre ELF y solo un poco más sobre cómo enlazar pero ...

Esperaría que cada operando se maneje de la misma manera que si solo hubiera uno.

OTOH podría ser el problema de que el formato para j altera dependiendo de dónde están las etiquetas? Si es así, creo que estás hundido porque los enlazadores no son lo suficientemente inteligentes como para hacer ese tipo de cosas (el sistema de construcción ADA IIRC podría ser más inteligente que la mayoría para que puedas verlo).


Esperaría una entrada por dirección para cada instrucción que necesita reubicación.

Objdump podría mostrar la tabla de reubicación de un archivo ejecutable o objeto, pero no conozco las banderas de forma directa.

Mi sugerencia es intentar desenterrar una instrucción x86 (u otra CISC) que haga algo similar a lo que hace su arco de cliente, y ver qué relocaciones se generan cuando lo ensambla / vincula.