Как сделать бинарник из bash скрипта: различия между версиями

Материал из support.qbpro.ru
imported>Vix
(Новая страница: «Появилась необходимость, скомпилировать bash скрипт в бинарный исполняемый файл. Смысл и...»)
 
imported>Vix
Нет описания правки
 
Строка 1: Строка 1:
Появилась необходимость, скомпилировать bash скрипт в бинарный исполняемый файл. Смысл и цели этих манипуляций каждый может найти себе сам, вдруг понадобится. Нашелся такой проект http://www.datsi.fi.upm.es/~frosal/, некоего Francisco Javier Rosales García. Утилита называется shc, транслятор языка bash в C, с последующей компиляцией в двоичный формат. Все манипуляции производим на виртуальной машине с debian 8 jessie на борту. Скачиваем архив, разархивируем, компилируем:
Появилась необходимость, скомпилировать '''bash''' скрипт в бинарный исполняемый файл. Смысл и цели этих манипуляций каждый может найти себе сам, вдруг понадобится. Нашелся такой [http://www.datsi.fi.upm.es/~frosal/ проект], некоего '''Francisco Javier Rosales García'''. Утилита называется '''shc''', транслятор языка '''bash''' в '''C''', с последующей компиляцией в двоичный формат. Все манипуляции производим на виртуальной машине с '''debian 8 jessie''' на борту. Скачиваем архив, разархивируем, компилируем:


  root@debian8:~ # wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
  root@debian8:~ # wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
Строка 10: Строка 10:


Собственно инструмент готов, можно использовать.
Собственно инструмент готов, можно использовать.
Использование shc
Использование '''shc'''
Список возможных опций:
Список возможных опций:


Строка 39: Строка 39:
     Please consult the shc(1) man page.
     Please consult the shc(1) man page.
   
   
Для проверки накидаем скрипт script.sh в пару строк:
Для проверки накидаем скрипт '''script.sh''' в пару строк:


  #!/bin/bash
  #!/bin/bash
Строка 53: Строка 53:
  root@debian8:~/shc-3.8.9b # ./shc -r -T -f ./script.sh
  root@debian8:~/shc-3.8.9b # ./shc -r -T -f ./script.sh


На выходе получаем 2 новых файла: script.sh.x - двоичный исполняемый файл script.sh.x.c - С код полученный из bash скрипта, при желании его можно подправить руками и скомпилировать штатными средствами системы. Проверяем бинарник:
На выходе получаем 2 новых файла: '''script.sh.x''' - двоичный исполняемый файл '''script.sh.x.c''' - С код полученный из '''bash''' скрипта, при желании его можно подправить руками и скомпилировать штатными средствами системы. Проверяем бинарник:


  root@debian8:~/shc-3.8.9b # ./script.sh.x "binary file"
  root@debian8:~/shc-3.8.9b # ./script.sh.x "binary file"

Текущая версия от 16:25, 16 апреля 2019

Появилась необходимость, скомпилировать bash скрипт в бинарный исполняемый файл. Смысл и цели этих манипуляций каждый может найти себе сам, вдруг понадобится. Нашелся такой проект, некоего Francisco Javier Rosales García. Утилита называется shc, транслятор языка bash в C, с последующей компиляцией в двоичный формат. Все манипуляции производим на виртуальной машине с debian 8 jessie на борту. Скачиваем архив, разархивируем, компилируем:

root@debian8:~ # wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
root@debian8:~ # tar -xzf ./shc-3.8.9b.tgz
root@debian8:~ # cd shc-3.8.9b
root@debian8:~/shc-3.8.9b # make
cc -Wall  shc.c -o shc
***     ▒Do you want to probe shc with a test script?
***     Please try...   make test

Собственно инструмент готов, можно использовать. Использование shc Список возможных опций:

root@debian8:~/shc-3.8.9b # ./shc -help
shc Version 3.8.9b, Generic Script Compiler
shc Copyright (c) 1994-2015 Francisco Rosales 
shc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-rvDTCAh] -f script

    -e %s  Expiration date in dd/mm/yyyy format [none]
    -m %s  Message to display upon expiration ["Please contact your provider"]
    -f %s  File name of the script to compile
    -i %s  Inline option for the shell interpreter i.e: -e
    -x %s  eXec command, as a printf format i.e: exec('%s',@ARGV);
    -l %s  Last shell option i.e: --
    -r     Relax security. Make a redistributable binary
    -v     Verbose compilation
    -D     Switch ON debug exec calls [OFF]
    -T     Allow binary to be traceable [no]
    -C     Display license and exit
    -A     Display abstract and exit
    -h     Display help and exit

    Environment variables used:
    Name    Default  Usage
    CC      cc       C compiler command
    CFLAGS     C compiler flags

    Please consult the shc(1) man page.

Для проверки накидаем скрипт script.sh в пару строк:

#!/bin/bash
echo $1

Скрипт просто выводит строку, переданную ему в качестве параметра

root@debian8:~/shc-3.8.9b # ./script.sh testing
testing

Теперь скомпилируем бинарный файл.

root@debian8:~/shc-3.8.9b # ./shc -r -T -f ./script.sh

На выходе получаем 2 новых файла: script.sh.x - двоичный исполняемый файл script.sh.x.c - С код полученный из bash скрипта, при желании его можно подправить руками и скомпилировать штатными средствами системы. Проверяем бинарник:

root@debian8:~/shc-3.8.9b # ./script.sh.x "binary file"
binary file

Использовать полученный бинарник можно практически на любой версии linux. Скрипту можно установить срок годности (опция -e), по истечение которого файл будет выдавать сообщение (опция -m).

ИСТОЧНИК: