Tenemos un problema relacionado con una aplicación Java que se ejecuta bajo un FC3 (bastante antiguo) en una tarjeta POS de Advantech con un procesador Via C3. La aplicación Java tiene varias librerías compiladas compiladas a las que se accede a través de JNI.Determine la arquitectura de destino del archivo binario en Linux (biblioteca o ejecutable)
Se supone que el procesador Via C3 es compatible con i686. Hace algún tiempo, después de instalar Ubuntu 6.10 en una placa MiniItx con el mismo procesador, descubrí que la declaración anterior no es 100% verdadera. El núcleo de Ubuntu se colgó al inicio debido a la falta de algunas instrucciones específicas y opcionales del i686 en el procesador C3. Estas instrucciones que faltan en la implementación C3 del conjunto i686 son utilizadas por defecto por el compilador GCC cuando se usan optimizaciones i686. La solución en este caso fue ir con una versión compilada i386 de la distribución de Ubuntu.
El problema de base con la aplicación Java es que la distribución FC3 se instaló en la HD al clonar desde una imagen de la HD de otra PC, esta vez una Intel P4. Posteriormente, la distribución necesitó algunos ataques para que se ejecutara, como la sustitución de algunos paquetes (como el kernel) por la versión compilada de i383.
El problema es que después de trabajar durante un tiempo, el sistema se cuelga completamente sin dejar rastro. Me temo que algún código i686 se deja en algún lugar del sistema y se puede ejecutar de forma aleatoria en cualquier momento (por ejemplo, después de recuperar desde el modo de suspensión o algo así).
Mi pregunta es:
- ¿Hay alguna herramienta o forma de averiguar en qué arquitectura específica es un archivo binario (ejecutable o una biblioteca), destinado a condición de que "archivo" no da tanta información ?
Objdump -d debe conseguirle una representación de ASM que luego puede grep para codigos de opcion malos. –
Creo que seguiré de la manera que me propongas. Solo necesito averiguar cómo descompilar vmlinuz (no estoy seguro de si el kernel en sí es la versión i386 o i686). –
+1. No es de mucha ayuda en mi caso, ¡pero realmente amo esta manera hacky! –