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

发布于 2021-02-01 16:40:05

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

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

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

问题是,工作一段时间后,系统完全挂起,没有任何痕迹。恐怕某些i686代码会留在系统中的某个位置,并且可以在任何时间随机执行(例如,从挂起模式恢复后)。

我的问题是:

  • 是否有任何工具或方法可以找出二进制文件(可执行文件或库文件)对特定体系结构扩展的要求?file没有提供足够的信息。
关注者
0
被浏览
93
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    我认为您需要一个检查每条指令的工具,以准确确定该指令属于哪个指令集。C3处理器实现的特定指令集甚至没有正式名称吗?如果没有,它甚至更毛。

    如果您可以确定不允许使用的指令的位模式,则可能会在文件中进行原始搜索,这是一种快速的’n’dirty变体。例如,只需直接测试它们,就可以通过一个简单的objdump | grep链来完成。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看