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):
- # decreases.s Decrementa un valor hasta 0 
- .section .data 
- number: 
-         .int 8 
- frase: 
-         .asciz "Res: %dn" 
- .section .text 
- .globl _start 
- _start: 
- nop 
- mov $1, %eax 
- mov number, %ebx 
- loop: 
-         dec %ebx 
-         je just 
-         pushl %ebp 
-         pushl %ecx 
-         movl %ebx, 4(%esp) 
-         movl $frase, (%esp) 
-         call printf 
-         addl $8, %esp 
-         jmp loop 
- just: 
-         mov $0, %ebx 
-         int $0x80 
-   
Y luego hago:
- as --32 decreases.s -o decreases.o 
-   
y
- ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o decreases -lc decreases.o 
-   
Pero en mi maquina me devuelve:
- ld: skipping incompatible /usr/lib/libc.so when searching for -lc 
- ld: skipping incompatible /usr/lib/libc.a when searching for -lc 
- ld: cannot find -lc 
-   
Pero en otra maquina me lo hace correctamente.
Las diferencias son:
En mi máquina:
- 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:
- 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