./ruido-det: no se puede ejecutar el fichero binario
al no entender que pasaba, investigo los permisos y estaban bien, pero al hacer:
ldd ruido-det
not a dynamic executable
Al ver la versión original en el x86 se ve esto:
ldd ruido-det
linux-vdso.so.1 => (0x00007fff8e1ff000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe5bca59000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe5bc69c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe5bcd72000)
ahí me di cuenta que algo no encajaba cuando recompilé el código en la i386
ldd ruido-det
linux-gate.so.1 => (0xb789d000)
libm.so.6 => /lib/i386-linux-gnu/i686/cmov/libm.so.6 (0xb7861000)
libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb7704000)
/lib/ld-linux.so.2 (0xb789e000)
en la x86 aparece una nueva biblioteca que da la incompatibilidad la "linux-vdso.so.1" y "ld-linux-x86-64.so.2". Buscando en Learn Linux, encuentro lo siguiente:
- linux-vdso.so.1: is the Linux Virtual Dynamic Shared Object
- /lib64/ld-linux-x86-64.so.2: is the absolute path to another library.
En los primeros días de procesadores x86, la comunicación de los programas de usuario a los servicios de supervisor se realizó a través de una interrupción de software. Como la velocidad del procesador aumenta, esto se convirtió en un serio cuello de botella. Intel introdujo un sistema de llamada rápida para acelerar las llamadas al sistema utilizando el SYSENTER e instrucciones SYSEXIT en lugar de las interrupciones.
La biblioteca linux-vdso.so.1 es una biblioteca virtual o Virtual Dynamic Shared Object, que se encuentra sólo en el espacio de direcciones de cada programa. En los sistemas antiguos se usaba linux-gate.so.1. Esta biblioteca virtual proporciona la lógica necesaria para permitir que los programas de usuario accedan a las funciones del sistema de una manera más rápida según el procesador en particular.
Es decir: en según he leído los ejecutables i386 pueden correr en x86 pero la recíproca no es posible!!
No hay comentarios:
Publicar un comentario