1

Как мне скомпилировать бинарный скрипт для FreeBSD? Я попробовал бинарный эмулятор Linux, но он не работает.

3 ответа3

1

Программа shc не является настоящим компилятором оболочки. Со страницы руководства:

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

Некоторые языки сценариев, такие как, например, Python, преобразуют сценарии в байт-код перед их выполнением. Оболочек, которые можно использовать в интерактивном режиме, обычно нет, они просто переводчики.

Можно даже утверждать, что за исключением некоторых приукрашиваний, таких как переменные, циклы и другие управляющие структуры, оболочки в основном являются внешним интерфейсом для функций fork и exec .

1

Решение состоит в том, чтобы использовать только ksh, застрахованный от [ba] sh, в качестве интерпретатора сценария.

0

На самом деле не существует такой вещи, как бинарный скрипт оболочки (скрипт означает не бинарный) - хотя возможно поместить исполняемый двоичный файл или сжатый файл в конец скрипта оболочки, который обычно просто содержит команду tail для удаления оболочки Сценарий и распаковать / препроцессировать и выполнить двоичный файл.

При правильной настройке скрипт должен включать используемую оболочку (#!/bin/sh будет традиционной версией Unix по умолчанию) или должна использовать только команды, общие для всех оболочек. Простая вещь - сделать его доступным только для чтения, открыть его с помощью vi и просмотреть его, а затем просто выполнить команду (-и) полезной нагрузки для файла (с необходимыми корректировками) - часто дело в том, чтобы установить некоторые переменные среды или выполнить некоторую предварительную обработку, чаще всего включая декомпрессию).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .