gpt4 book ai didi

linux - 确定 Linux 中二进制文件的目标 ISA 扩展名(库或可执行文件)

转载 作者:IT老高 更新时间:2023-10-28 12:32:03 27 4
gpt4 key购买 nike

我们遇到了一个问题,该问题与在带有 Via C3 处理器的 Advantech POS 板上的(相当旧的)FC3 下运行的 Java 应用程序有关。 Java 应用程序有几个通过 JNI 访问的已编译共享库。

Via C3 处理器应该与 i686 兼容。前段时间在具有相同处理器的 MiniItx 板上安装 Ubuntu 6.10 后,我发现前面的说法并非 100% 正确。由于缺少C3处理器中设置的i686的一些特定和可选指令,Ubuntu内核在启动时挂起。在使用 i686 优化时,GCC 编译器默认使用 i686 集的 C3 实现中缺少的这些指令。在这种情况下,解决方案是使用 i386 编译版本的 Ubuntu 发行版。

Java 应用程序的基本问题是 FC3 发行版是通过克隆另一台 PC(这次是 Intel P4)的 HD 镜像而安装在 HD 上的。之后,该发行版需要进行一些修改才能使其运行,例如用 i386 编译版本替换一些软件包(例如内核)。

问题是工作一段时间后系统完全挂掉了。恐怕有些 i686 代码会留在系统某处,并且可能随时随机执行(例如从挂起模式恢复后或类似的情况)。

我的问题是:

  • 是否有任何工具或方法可以找出二进制文件(可执行文件或库)需要哪些特定架构扩展? file 没有提供足够的信息。

最佳答案

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 交叉编译器编译(在 i86 机器上编译,以 ARM 处理器为目标)

关于linux - 确定 Linux 中二进制文件的目标 ISA 扩展名(库或可执行文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/267941/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com