これは答えではないかもしれませんが、手がかりとして役立つかもしれません: で作成された SBCL 実行可能ファイルの末尾に、1 バイトでも何かを追加すると、sb-ext:save-lisp-and-die
説明したように、すべての定義が消えることがわかりました.
おそらく、SBCL はコア (定義を含む) を SBCL ELF (または Windows では PE) バイナリのコピーに追加し、最後にいくつかのメタデータを追加することで実行可能ファイルを作成します。実行可能ファイルに。
で作成された実行可能ファイルを 16 進編集するsave-lisp-and-die
と、文字列 "LCBS" (SBCL を逆方向) で終わることがわかります。これは私の理論を裏付けているようです。「LCBS」はおそらくマジック ナンバーとして機能し、この実行可能ファイルには独自のコアが含まれていることを SBCL に知らせます。
UPX は実行可能ファイルを圧縮し、おそらく最後にそのマジック ナンバーを含めます。SBCL がディスク上で UPX 圧縮された自己を開くと、最後に「LCBS」が見つからないため、実行可能ファイルにコアが追加されていないと想定します。
この場合、標準ライブラリがまだ存在しているように見える理由を説明できません。その場合、SBCL が読み込まれる可能性があります/usr/lib/sbcl/sbcl.core
(または、Windows では同等のものが読み込まれます)。これは、実行可能ファイルを SBCL がインストールされていないマシンに移動し、それがまったく機能するかどうかを確認することでテストできcar
ます。cdr
list