Abbiamo un problema relativo a un'applicazione Java in esecuzione su un (piuttosto vecchio) FC3 su una scheda Advantech POS con un processore Via C3. L'applicazione java ha diverse librerie condivise compilate a cui si accede tramite JNI.Determinazione dell'architettura di destinazione del file binario in Linux (libreria o eseguibile)
Il processore Via C3 è compatibile con i686. Qualche tempo fa, dopo aver installato Ubuntu 6.10 su una scheda MiniItx con lo stesso processore, ho scoperto che l'affermazione precedente non è vera al 100%. Il kernel di Ubuntu si è bloccato all'avvio a causa della mancanza di alcune istruzioni specifiche e facoltative del set i686 nel processore C3. Queste istruzioni mancanti nell'implementazione C3 del set i686 vengono utilizzate per impostazione predefinita dal compilatore GCC quando si utilizzano le ottimizzazioni i686. La soluzione in questo caso era di andare con una versione compilata i386 della distribuzione di Ubuntu.
Il problema di base con l'applicazione Java è che la distribuzione FC3 è stata installata sull'HD clonando da un'immagine dell'HD di un altro PC, questa volta un Intel P4. Successivamente la distribuzione aveva bisogno di hacking per farlo funzionare come la sostituzione di alcuni pacchetti (come quello del kernel) con la versione compilata i383.
Il problema è che dopo aver lavorato per un po 'il sistema si blocca completamente senza lasciare traccia. Temo che alcuni codici i686 vengano lasciati da qualche parte nel sistema e possano essere eseguiti in modo casuale in qualsiasi momento (ad esempio dopo il ripristino dalla modalità di sospensione o qualcosa del genere).
La mia domanda è:
- C'è qualche strumento o un modo per scoprire a quale specifica architettura è un file binario (eseguibile o libreria) finalizzato a condizione che "file di" non dà così tante informazioni ?
objdump -d dovrebbe ottenere una rappresentazione ASM, quindi è possibile grep per opcode non validi. –
Penso che andrò come ti proponi. Ho solo bisogno di scoprire come decompilare vmlinuz (non posso essere sicuro se il kernel stesso sia la versione i386 o i686). –
+1. Non è molto utile nel mio caso, ma mi piace molto questo modo hacky! –