Test Foro de elhacker.net SMF 2.1

Programación => Programación General => ASM => Mensaje iniciado por: RockPosts en 24 Agosto 2015, 06:24 AM

Título: ¿Por qué es necesario enlazar SIEMPRE el objeto y con que se enlaza (NASM)
Publicado por: RockPosts en 24 Agosto 2015, 06:24 AM
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
Título: Re: ¿Por qué es necesario enlazar SIEMPRE el objeto y con que se enlaza (NASM)
Publicado por: Eternal Idol en 24 Agosto 2015, 09:15 AM
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.
Título: Re: ¿Por qué es necesario enlazar SIEMPRE el objeto y con que se enlaza (NASM)
Publicado por: RockPosts en 24 Agosto 2015, 10:37 AM
¿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)