файл bash содержит исполняемый/двоичный код

Используйте стандартный<>shоператор перенаправления, который открывает файл в режиме чтения+записи без усечения .

cat < file.in 1<> file.out

Чтобы скопировать содержимое file.inв начало file.out.

Если вам нужно выполнить поиск во входном или выходном файле и предположить, что ваш ddпо-прежнему поддерживает эти директивы:

dd bs=4 count=3 skip=2 seek=3 < file.in 1<> file.out

Если у вас вообще нет dd, вы можете попробовать head -c, предполагая, что ваша версия позаботится о том, чтобы указатель в файле оставался в нужном месте при выходе (, какие старые версии busybox IIRC были не делать ).

Например, эквивалентом вышесказанного будет:

{
  head -c 8 > /dev/null        # seek input fd to offset 8
  head -c 12 <&1 > /dev/null   # seek output fd to offset 12
  head -c 12                   # copy 12 bytes
} < file.in 1<> file.out
0
28.08.2019, 23:02
1 ответ

Это автономная -Java-программа, основанная на нескольких «трюках»:

  • Java-программы могут быть упакованы в виде файлов JAR, которые представляют собой ZIP-файлы, содержащие манифест (META-INF/MANIFEST.MF), указывающий запускаемый класс Java;
  • java -jar, учитывая файл JAR, просмотрит манифест и запустит соответствующий класс, загрузив любые другие необходимые ресурсы из файла JAR и среды выполнения Java (можно также указать другой класс для запуска, но здесь это не имеет значения );
  • ZIP-файлы могут начинаться с произвольных данных; так работают самораспаковывающиеся -исполняемые файлы (исполняемые ZIP-файлы, которые будут распаковываться при запуске ).

Итак, svg2png— это файл JAR, но с предваряемым сценарием оболочки:

#!/bin/sh

exec java -Xmx1G -jar "$0" "$@"

При запуске будет запущена оболочка, которая затем заменит себя на java -Xmx1G -jarи имя «сценария»(svg2pngс любым использованным путем )и любыми аргументами. -Xmx1Gустанавливает размер кучи, а -jarуказывает JVM «запустить» данный файл JAR, в данном случае svg2png. Остальная часть svg2png— это файл JAR; в частности, он содержит следующий манифест:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: sterlp
X-Compile-Target-JDK: 1.8
X-Compile-Source-JDK: 1.8
Created-By: Apache Maven 3.3.3
Build-Jdk: 1.8.0_51
Main-Class: org.sterl.svg2png.Main

Это указывает JVM запустить класс org.sterl.svg2png.Main, который запускает программу.

Вы найдете более подробную информацию о формате ZIP в Википедии , в частности описание структуры, которое показывает, как формат допускает произвольные данные в начале файла (и в других позициях ). ZIP-файлы идентифицируются по их «центральному каталогу», который находится в конце файла.

3
28.01.2020, 02:22

Теги

Похожие вопросы