Programación General > ASM (Ensamblador)
Problema al linkar en 32bits (estando en 64)
(1/1)
Leber:
Hola, que tal.
Estoy leyendo un manual de asm, pero el codigo que muestran es de 32 bits, y mi máquina es de 64. Algunos ejercicios puedo hacerlos igual, pero cuando empiezan a manejar la pila también empiezan mis dolores de cabeza.
Imaginemos este, (lo he hecho yo para probar un poco):
--- Código: ASM ---# decreases.s Decrementa un valor hasta 0.section .datanumber: .int 8frase: .asciz "Res: %dn".section .text.globl _start_start:nopmov $1, %eaxmov number, %ebxloop: dec %ebx je just pushl %ebp pushl %ecx movl %ebx, 4(%esp) movl $frase, (%esp) call printf addl $8, %esp jmp loopjust: mov $0, %ebx int $0x80
Y luego hago:
--- Código: ASM ---as --32 decreases.s -o decreases.o y
--- Código: ASM ---ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o decreases -lc decreases.o
Pero en mi maquina me devuelve:
--- Código: ASM ---ld: skipping incompatible /usr/lib/libc.so when searching for -lcld: skipping incompatible /usr/lib/libc.a when searching for -lcld: cannot find -lc
Pero en otra maquina me lo hace correctamente.
Las diferencias son:
En mi máquina:
--- Código: ASM ---ls -l /lib/ld-linux.so.2 lrwxrwxrwx 1 root root 20 2011-02-02 14:09 /lib/ld-linux.so.2 -> /lib32/ld-linux.so.2
En la otra:
--- Código: ASM ---ls -l /lib/ld-linux.so.2 lrwxrwxrwx 1 root root 9 2011-01-28 14:21 /lib/ld-linux.so.2 -> ld-2.7.so
Tenéis alguna idea, seguramente algo estoy haciendo mal, pero no caigo.
Gracias de antemano
m0skit0:
Creo que tu problema no radica en ld, sino que tienes una libc de 64 bits y estás intentando compilar para 32 bits.
Además ten cuenta que la pila va por palabras de 64 bits y no 32, así que ojo con eso también.
Leber:
Entonces supongo que tendré que instalarme un SO de 32bits. Yo creía que diciendole que generara código de 32bits podía salvar esto.
Gracias por responder ^_^
m0skit0:
Con instalar una librería de 32 bits te valdría creo.
Navegación
Ir a la versión completa