Mamy problem związany z aplikacją Java działającą pod (raczej starym) FC3 na płycie Advantech POS z procesorem Via C3. Aplikacja Java ma kilka skompilowanych udostępnionych bibliotek, do których można uzyskać dostęp za pośrednictwem JNI.Określić docelową architekturę pliku binarnego w systemie Linux (biblioteka lub plik wykonywalny)
Procesor C3 ma być zgodny z i686. Jakiś czas temu po zainstalowaniu Ubuntu 6.10 na płytce MiniItx z tym samym procesorem dowiedziałem się, że poprzednie stwierdzenie nie jest w 100% prawdziwe. Jądro Ubuntu zostało zawieszone przy starcie ze względu na brak konkretnych i opcjonalnych instrukcji zestawu i686 w procesorze C3. Te instrukcje, których brakuje w implementacji C3 zestawu i686, są używane domyślnie przez kompilator GCC podczas korzystania z optymalizacji i686. Rozwiązaniem w tym przypadku było zastosowanie skompilowanej wersji dystrybucji Ubuntu i386.
Podstawowym problemem związanym z aplikacją Java jest to, że dystrybucja FC3 została zainstalowana na HD poprzez klonowanie z obrazu HD innego komputera, tym razem Intel P4. Później dystrybucja wymagała hakowania, aby ją uruchomić, np. Zastąpienie niektórych pakietów (takich jak jądro) wersją skompilowaną i383.
Problem polega na tym, że po pewnym czasie pracy system całkowicie zawiesza się bez śladu. Obawiam się, że jakiś kod i686 został gdzieś w systemie i mógł być wykonany losowo w dowolnym momencie (na przykład po odzyskaniu z trybu zawieszenia lub coś podobnego).
Moje pytanie brzmi:
- Czy istnieje narzędzie lub sposób, aby dowiedzieć się, na jakie konkretne architektura jest plik binarny (wykonywalny lub biblioteki) skierowany pod warunkiem, że „plik” nie daje tak wiele informacji ?
objdump -d powinien otrzymać ASM reprezentację, możesz po prostu grep na złe opkody. –
Myślę, że pójdę tak, jak pan proponuje. Muszę tylko dowiedzieć się, jak dekompilować vmlinuz (nie mogę być pewien, czy samo jądro to i386 czy i686). –
+1. W moim przypadku nie jest to zbyt pomocne, ale uwielbiam ten hackowy sposób! –