Via C3 프로세서가 장착 된 Advantech POS 보드에서 (다소 오래된) FC3에서 실행되는 Java 어플리케이션과 관련된 문제가 있습니다. Java 애플리케이션에는 JNI를 통해 액세스되는 여러 개의 컴파일 된 공유 라이브러리가 있습니다.Linux에서 바이너리 파일의 타겟 아키텍처 결정 (라이브러리 또는 실행 파일)
Via C3 프로세서는 i686 호환이 가능합니다. 몇 시간 전 동일한 프로세서를 가진 MiniItx 보드에 우분투 6.10을 설치 한 후 나는 이전의 진술이 100 % 사실이 아니라는 것을 발견했다. 우분투 커널은 C3 프로세서에 설정된 i686의 특정 및 선택적 명령이 없기 때문에 시작시 정지되었습니다. i686 세트의 C3 구현에서 누락 된 이러한 명령어는 i686 최적화를 사용할 때 GCC 컴파일러에서 기본적으로 사용됩니다. 이 경우의 해결책은 i386 컴파일 된 우분투 배포판을 사용하는 것이 었습니다.
Java 응용 프로그램의 기본 문제점은 다른 PC의 HD 이미지 (이번에는 Intel P4)에서 복제하여 FC3 배포가 HD에 설치되었다는 것입니다. 그 후 배포판에는 커널과 같은 일부 패키지를 i383 컴파일 된 버전으로 바꾸는 등의 해킹이 필요했습니다.
잠시 동안 작업 한 후 시스템이 추적없이 완전히 중단되는 것이 문제입니다. 일부 i686 코드는 시스템의 어딘가에 남겨 두어 언제든지 무작위로 실행할 수 있습니다 (예 : 일시 중지 모드 또는 이와 유사한 항목에서 복구 한 후).
내 질문은 :
- 는 "파일는"너무 많은 정보를 제공하지 않습니다 제공을 목표로 (실행 파일 또는 라이브러리)는 이진 파일입니다 구체적으로 어떤 구조에서 알 수있는 도구 나 방법이 있나요 ?
objdump -d는 잘못된 opcode를 grep 할 수있는 ASM 표현을 가져와야합니다. –
나는 당신이 제안하는 방식대로 갈 것이라고 생각합니다. vmlinuz를 디 컴파일하는 방법을 알아 내면됩니다 (커널 자체가 i386 또는 i686 버전인지는 확실하지 않습니다). –
+1. 그것은 내 경우에는별로 도움이되지 않지만, 나는이 해킹 방법을 정말 좋아합니다! –