SoloCodigo

Programación General => ASM (Ensamblador) => Mensaje iniciado por: Leber en Viernes 8 de Abril de 2011, 13:07

Título: Problema al linkar en 32bits (estando en 64)
Publicado por: Leber en Viernes 8 de Abril de 2011, 13:07
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
  1. # decreases.s Decrementa un valor hasta 0
  2. .section .data
  3. number:
  4.         .int 8
  5. frase:
  6.         .asciz "Res: %dn"
  7. .section .text
  8. .globl _start
  9. _start:
  10. nop
  11. mov $1, %eax
  12. mov number, %ebx
  13. loop:
  14.         dec %ebx
  15.         je just
  16.         pushl %ebp
  17.         pushl %ecx
  18.         movl %ebx, 4(%esp)
  19.         movl $frase, (%esp)
  20.         call printf
  21.         addl $8, %esp
  22.         jmp loop
  23. just:
  24.         mov $0, %ebx
  25.         int $0x80
  26.  

Y luego hago:

Código: ASM
  1. as --32 decreases.s -o decreases.o
  2.  
y
Código: ASM
  1. ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o decreases -lc decreases.o
  2.  

Pero en mi maquina me devuelve:

Código: ASM
  1. ld: skipping incompatible /usr/lib/libc.so when searching for -lc
  2. ld: skipping incompatible /usr/lib/libc.a when searching for -lc
  3. ld: cannot find -lc
  4.  

Pero en otra maquina me lo hace correctamente.

Las diferencias son:

En mi máquina:

Código: ASM
  1. ls -l /lib/ld-linux.so.2
  2. lrwxrwxrwx 1 root root 20 2011-02-02 14:09 /lib/ld-linux.so.2 -> /lib32/ld-linux.so.2
  3.  

En la otra:

Código: ASM
  1. ls -l /lib/ld-linux.so.2
  2. lrwxrwxrwx 1 root root 9 2011-01-28 14:21 /lib/ld-linux.so.2 -> ld-2.7.so
  3.  

Tenéis alguna idea, seguramente algo estoy haciendo mal, pero no caigo.

Gracias de antemano
Título: Re: Problema al linkar en 32bits (estando en 64)
Publicado por: m0skit0 en Viernes 8 de Abril de 2011, 13:21
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.
Título: Re: Problema al linkar en 32bits (estando en 64)
Publicado por: Leber en Viernes 8 de Abril de 2011, 13:44
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  ^_^
Título: Re: Problema al linkar en 32bits (estando en 64)
Publicado por: m0skit0 en Viernes 8 de Abril de 2011, 21:27
Con instalar una librería de 32 bits te valdría creo.