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