手动注入配制剂团


🌐 Injecting the preparation blob manually

在引入 --build-sea 之前,引入了一个较早的工作流,以允许外部工具将生成的 blob 注入到 node 二进制文件的副本中。

🌐 Before --build-sea was introduced, an older workflow was introduced to allow external tools to inject the generated blob into a copy of the node binary.

例如,对于 后射

🌐 For example, with postject:

  1. 创建一个 node 可执行文件的副本,并根据你的需要命名:

    • 在非 Windows 系统上:
    cp $(command -v node) hello 
    • 在 Windows 上:
    node -e "require('fs').copyFileSync(process.execPath, 'hello.exe')" 

    .exe 扩展名是必要的。

  2. 移除二进制文件的签名(仅限 macOS 和 Windows):

    • 在 macOS 上:
    codesign --remove-signature hello 
    • 在 Windows 上(可选):

    签名工具 可以从已安装的 Windows SDK 使用。如果跳过此步骤,请忽略来自 postject 的任何与签名相关的警告。

    signtool remove /s hello.exe 
  3. 通过运行 postject 并使用以下选项,将二进制副本注入 blob:

    • hello / hello.exe - 在步骤4中创建的 node 可执行文件副本的名称。
    • NODE_SEA_BLOB - 在二进制文件中用于存储该 blob 内容的资源/注释/部分的名称。
    • sea-prep.blob - 步骤1中创建的 blob 的名称。
    • --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 - Node.js 项目用来检测文件是否被注入的 保险丝
    • --macho-segment-name NODE_SEA(仅在 macOS 上需要)- 二进制中将存储 blob 内容的段的名称。

    总而言之,这是每个平台所需的命令:

    • 在 Linux 上:

      npx postject hello NODE_SEA_BLOB sea-prep.blob \
          --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 
    • 在 Windows 上 - PowerShell:

      npx postject hello.exe NODE_SEA_BLOB sea-prep.blob `
          --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 
    • 在 Windows 上 - 命令提示符:

      npx postject hello.exe NODE_SEA_BLOB sea-prep.blob ^
          --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 
    • 在 macOS 上:

      npx postject hello NODE_SEA_BLOB sea-prep.blob \
          --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 \
          --macho-segment-name NODE_SEA