Скомпилировать aarch64 двоичный скрипт bash - PullRequest
0 голосов
/ 06 ноября 2018

Я использовал shc на компьютере x86-64 для преобразования bash-скрипта в исполняемый двоичный файл. Это нормально работает на моей машине, но я делаю это с намерением перенести его на машину aarch64. После копирования двоичного файла на компьютер aarch64 я получаю эту ошибку:

не может выполнить двоичный файл: ошибка формата Exec

Вероятно, это связано с тем, что двоичный файл не отформатирован для запуска в этой ОС. Кто-нибудь знает инструмент, который даст мне двоичный файл, который может быть выполнен на aarch64 (не похоже, что shc может это сделать).

РЕДАКТИРОВАТЬ : команда file распечатывает это (на компьютере 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

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Краткий ответ - скомпилировать двоичный файл в целевой операционной системе. Со страницы man:

shc сам не является компилятором, таким как cc, он скорее кодирует и шифрует сценарий оболочки и генерирует исходный код C с добавленной возможностью истечения срока действия. Затем он использует системный компилятор для компиляции раздвоенного двоичного файла, который ведет себя точно так же, как и оригинальный скрипт.

Компиляция создает объектный файл, содержащий машинный код. Машинный код «может рассматриваться как представление самого низкого уровня скомпилированной или собранной компьютерной программы или как примитивный и аппаратно-зависимый язык программирования» (ref. https://en.wikipedia.org/wiki/Machine_code). Машинный код, полученный в результате компиляции исходного кода в SunOS 11.3 SPARCv4 не будет содержать тех же инструкций, что и машинный код, полученный в результате компиляции того же исходного кода в AIX PowerPC8.

0 голосов
/ 06 ноября 2018

спасибо, масейб. Я просто попробовал это, когда увидел твой комментарий. Теперь он работает, когда я использовал компилятор на машине arm.

...