Bash
bash 文件包含可執行/二進制程式碼
我找到了這個工具,當我下載它時,它是一個包含二進制程式碼的 bash 執行檔。
首先,我不知道這是可能的。有誰知道這可以做嗎?我也不確定這通常有多安全,因為我不能確定 bash 文件包含什麼
這是一個獨立的 Java 程序,它依賴於一些“技巧”:
- Java 程序可以打包為 JAR 文件,它們是包含清單 (
META-INF/MANIFEST.MF
) 的 ZIP 文件,該清單指定要啟動的 Java 類;java -jar
,給定一個 JAR 文件,將查看清單並啟動相應的類,從 JAR 文件和 Java 執行時載入任何其他所需的資源(也可以指定另一個要執行的類,但這與這裡無關);- ZIP 文件可以以任意數據開頭;這就是自解壓執行檔的工作方式(可執行 ZIP 文件將在執行時自行解壓)。
JAR 文件也是如此
svg2png
,但帶有一個前置的 shell 腳本:#!/bin/sh exec java -Xmx1G -jar "$0" "$@"
執行時,這將執行一個 shell,然後它將自身替換
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
啟動程序的類。您將在 Wikipedia 上找到有關 ZIP 格式的更多詳細資訊,特別是顯示該格式如何在文件開頭(以及其他位置)允許任意數據的結構描述。ZIP 文件由位於文件末尾的“中央目錄”標識。