我们有一个与Java应用程序相关的问题,该应用程序在带有Via C3处理器的研华POS板上运行在(相当旧的) FC3下。java应用程序有几个经过编译的共享库,可以通过JNI访问它们。
威盛C3处理器应该是兼容i686的。不久前,在使用相同处理器的MiniItx板上安装了Ubuntu6.10之后,我发现前面的说法并不是100%正确的。Ubuntu内核在启动时挂起,原因是C3处理器中的i686集缺少一些特定的和可选的指令。这些指令在i686 set的C3实现中缺失,在使用i686优化时,默认情况下由GCC编译器使用。在这种情况下,解决方案是使用Ubuntu发行版的i386编译版本。
Java应用程序的基本问题是,FC3发行版是通过从另一台PC (这次是英特尔P4 )的HD映像克隆而安装在HD上的。之后,这个发行版需要一些破解才能运行,比如用i386编译版本替换一些包(比如内核包)。
问题是,在工作一段时间后,系统完全挂起,没有任何痕迹。我担心一些i686代码会留在系统的某个地方,随时可能被随机执行(例如,在从挂起模式或类似的模式中恢复后)。
我的问题是:
file
没有提供足够的信息。发布于 2008-11-06 08:36:28
我认为你需要一个工具来检查每条指令,以准确地确定它属于哪个集合。对于C3处理器实现的特定指令集,是否有官方名称?如果不是,那就更多毛了。
如果您可以确定不允许的指令的位模式,那么一个快速的不干净的变体可能是在文件中执行原始搜索。例如,可以通过一个简单的objdump | grep
链直接对它们进行测试。
发布于 2010-05-25 15:04:52
unix.linux file
命令可以很好地实现这一点。它通常可以检测给定二进制文件的目标体系结构和操作系统(自1973年以来一直在断断续续地维护。哇!)
当然,如果你不是在unix/linux下运行,你就有点卡住了。我目前正在尝试寻找一个可以在运行时调用的基于java的端口。但没有这样的运气。
unix file
命令提供如下信息:
hex: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.4.17, not stripped
使用(unix) objdump -f <fileName>
命令可提示有关体系结构详细信息的更多详细信息,该命令返回:
architecture: arm, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x0000876c
此可执行文件由gcc交叉编译器编译(作为目标在ARM处理器的i86机器上编译)。
发布于 2014-07-04 23:10:45
我决定为任何来到这里的人再添加一个解决方案:就我个人而言,file
和objdump
提供的信息还不够,grep
也帮不了什么忙--我通过readelf -a -W
解决了我的问题。
注意,这给了你相当多的信息。与arch相关的信息位于最开始和最末。下面是一个例子:
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: ARM
Version: 0x1
Entry point address: 0x83f8
Start of program headers: 52 (bytes into file)
Start of section headers: 2388 (bytes into file)
Flags: 0x5000202, has entry point, Version5 EABI, soft-float ABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 8
Size of section headers: 40 (bytes)
Number of section headers: 31
Section header string table index: 28
...
Displaying notes found at file offset 0x00000148 with length 0x00000020:
Owner Data size Description
GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
OS: Linux, ABI: 2.6.16
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "7-A"
Tag_CPU_arch: v7
Tag_CPU_arch_profile: Application
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-2
Tag_FP_arch: VFPv3
Tag_Advanced_SIMD_arch: NEONv1
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_rounding: Needed
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_align_preserved: 8-byte, except leaf SP
Tag_ABI_enum_size: int
Tag_ABI_HardFP_use: SP and DP
Tag_CPU_unaligned_access: v6
https://stackoverflow.com/questions/267941
复制相似问题