【问题标题】:Compile aarch64 binary bash script编译 aarch64 二进制 bash 脚本
【发布时间】:2019-04-10 00:56:05
【问题描述】:

我在 x86-64 机器上使用 shc 将 bash 脚本转换为可执行二进制文件。这在我的机器上运行良好,但我这样做的目的是将它推到 aarch64 机器上。将二进制文件复制到 aarch64 机器后,出现此错误:

无法执行二进制文件:执行格式错误

这似乎是由于二进制文件未格式化以在此操作系统上运行造成的。有谁知道可以给我一个可以在 aarch64 上执行的二进制文件的工具(似乎 shc 不能做到这一点)。

EDIT:文件命令将其打印出来(在 aarch 机器上):

ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接,解释器 /lib64/ld-linux-x86-64.so.2,用于 GNU/Linux 2.6.32,BuildID[sha1 ]=f6f72e60c9ae8c2fd3abe5aa47f9ba6be7000be6,剥离

只需确认该文件适用于 x86-46

【问题讨论】:

  • 应该在目标操作系统上构建组件(在任何地方编写一次编译)或选择不同的方法(一次编写在任何地方运行),即独立于平台的 java(以及其他)(在 Java Virtual 上执行)机器)。
  • 为什么要在树莓派上使用 shc?您没有获得任何有意义的安全/机密性好处(通过使用除 ptrace 之外的任何系统调用跟踪机制来绕过 ptrace 规避“安全”模式是微不足道的),但结果执行起来要慢得多......并且在 Pi 上,您需要那种性能。

标签: linux bash compilation binary executable


【解决方案1】:

谢谢梅西。当我看到你的评论时,我只是在尝试。现在我已经在 arm 机器上使用了编译器,它可以工作了。

【讨论】:

    【解决方案2】:

    简短的回答是在目标操作系统上编译二进制文件。来自man 页面:

    shc 本身并不是 cc 这样的编译器,而是对 shell 脚本进行编码和加密,并生成具有附加过期能力的 C 源代码。然后它使用系统编译器编译一个剥离的二进制文件,其行为与原始脚本完全相同。

    编译生成一个包含机器代码的目标文件。机器代码“可以被视为已编译或组装的计算机程序的最低级别表示,或者被视为原始的和硬件相关的编程语言”(参考https://en.wikipedia.org/wiki/Machine_code)。在 SunOS 11.3 SPARCv4 上编译源代码产生的机器代码将不会包含与在 AIX PowerPC8 上编译相同源代码产生的机器代码相同的指令。

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 2017-09-28
      • 2020-10-15
      • 1970-01-01
      • 2022-06-10
      • 2012-09-02
      相关资源
      最近更新 更多