当前位置: 首页 > 面试题库 >

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

夏何平
2023-03-14
问题内容

我们遇到一个与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没有提供足够的信息。

问题答案:

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

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



 类似资料:
  • 澄清一下,这是一个关于二进制 Linux 可执行文件的问题,而不是脚本,脚本也可以是可执行的,并且通常缺少扩展。 根据我的经验,大多数Linux二进制可执行文件缺少文件扩展名;例如,Linux系统上目录中的大多数文件缺少扩展名。 另一方面,目录中的大多数文件在其文件扩展名中都有,并且也有可执行权限。尝试直接执行文件通常会导致seg错误或一些错误,这是有道理的,因为共享库通常旨在动态链接。但是据我所

  • vendor 文件是什么? 任何一个 Composer 程序包想要传递给安装包的用户的命令行脚本都应该被列为 vendor 文件。 如果包包含了包用户不需要的其他脚本(如构建或编译脚本),则代码不应被列为 vendor 文件。 它是如何定义的? 它是通过将 bin 键添加到项目中来定义的 composer.json。它被指定为文件数组,因此可以为任何给定项目添加多个二进制文件。 { "bi

  • 问题内容: 我为数据库中的存储过程生成了完整的脚本集。当我创建Mercurial存储库并添加这些文件时,它们都以二进制形式添加。显然,我仍然可以获得版本控制的好处,但是会损失很多效率,文本文件的“差异化”等。我验证了这些文件的确只是文本。 为什么这样做呢? 我应该怎么做才能避免这种情况? 有没有办法让汞改变他们对这些文件的看法? 这是变更集日志的片段: 预先感谢您的帮助吉姆 问题答案: 为了符合M

  • 问题内容: 假设给了我一个URI,并且我想找到返回的文件的文件扩展名,那么我必须在Java中做什么。 例如,位于http://www.daml.org/2001/08/baseball/baseball- ont 的文件为http://www.daml.org/2001/08/baseball/baseball- ont.owl 当我做 我无法看到带有扩展名的完整文件名,以及如何获取文件扩展名。`

  • 问题内容: 我在Ubuntu 9.10 x86_64上安装了二进制Linux应用程序。该应用程序附带了旧版本的gzip(1.2.4),该版本已针对较旧的内核进行了编译: 我无法执行该程序。如果我尝试过,就会发生这种情况: ldd同样对此二进制文件不满意: 我很好奇:此问题最可能的根源是什么?文件损坏了吗?还是由于为较旧的{kernel,libc,…}构建而导致二进制不兼容? Per nos的建议,

  • 问题内容: 我有许多扩展名为.txt的文件。如何删除Linux中多个文件的.txt扩展名? 我找到 替代扩展 我也想对子文件夹中的文件执行此操作。 问题答案: 有点危险,因为根据其手册页: 重命名将通过替换第 一次 出现的… 来重命名指定的文件。 像这样的文件名会很乐意做错事。 这是使用和的解决方案: 请记住,如果文件名包含换行符(罕见,但并非不可能),这将中断。 如果您有GNU查找,这是一个更可