¿Por qué es necesario enlazar SIEMPRE el objeto y con que se enlaza (NASM)

Iniciado por RockPosts, 24 Agosto 2015, 06:24 AM

0 Miembros y 1 Visitante están viendo este tema.

RockPosts

Hola a todos, soy nuevo en este foro. La pregunta es por qué es necesario enlazar códigos que no tienen ninguna referencia externa (es puro nasm). Estoy trabajando bajo linux, y este es el código que he empleado:

Código (asm) [Seleccionar]
section     .text
global      _start

_start:

    mov     edx,len
    mov     ecx,msg
    mov     ebx,1
    mov     eax,4
    int     0x80

    mov     eax,1
    int     0x80

section     .data

msg     db  'Hello, world!',0xA
len     equ $ - msg


El comando que utilizo para ensamblar un objeto es el siguiente:

nasm -f eof main.asm

El código que utilizo para enlazar es el siguiente:

ld -s -o main main.o

Nota: Cabe destacar que si hago esto directamente no funciona:
nasm main.asm
Es cierto que me entrega un archivo, pero este no puede ser ejecutado.

Muchas gracias

Eternal Idol

Que casualidad otro nuevo usuario preguntando por NASM  :rolleyes:

Al enlazar no solo se resuelven las referencias externas, tambien se crea el formato de ejecutable (ya sea MZ, PE, COFF, ELF o lo que sea) y salvo algo muy primitivo o de bajo nivel, como los ejecutables .COM de MS-DOS o un sector de booteo, necesita ser enlazado.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

RockPosts

¿Qué quieres decir con que casualidad? Bueno, gracias por la respuesta, aunque siento decir que ya la habia averiguado investigando mucho (llevaba mucho sin entenderlo bien)