es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Si un archivo de objeto define _start y no usa ninguna biblioteca, ¿por qué todavía necesito vincularlo antes de poder ejecutarlo?

Tengo un programa de hola mundo:

.global _start

.text

_start:
# write (1, msj, 13)
mov $1, %rax # la llamada al sistema 1 es escribir
mov $1, %rdi # el controlador de archivo 1 es la salida estándar
mov $message, %rsi # dirección de la cadena a mostrar
mov $13, %rdx # número de bytes
syscall

# exit(0)
mov $60, %rax           # la llamada al sistema 60 es salir
xor %rdi, %rdi          # queremos devolver el código 0
syscall

message:
.ascii “Hola, mundo\n”

Puedo ensamblarlo en un archivo objeto con:

as hello.s -o hello.o

Este archivo objeto no es ejecutable. Cuando trato de ejecutarlo, obtengo:

bash: ./hello.o: no se puede ejecutar el archivo binario: error de formato de ejecución

Necesito invocar al vinculador para hacerlo viable:

ld hello.o -o hello

En este punto, el programa hello funciona. Sin embargo, el uso del vinculador aquí me resulta confuso…. ¡No estoy vinculando ninguna biblioteca externa! Parece que solo estoy vinculando el archivo objeto a nada.

¿Qué hace el vinculador para un programa “autónomo”?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El enlazador es responsable de tomar el archivo objeto y crear un archivo ejecutable. Lo hace agregando la información necesaria al archivo objeto, como el punto de entrada del programa, los encabezados del programa y las secciones del programa. Esto permite que el sistema operativo cargue y ejecute adecuadamente el programa.

Comments are closed.