手动注入配制剂团
🌐 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:
-
创建一个
node可执行文件的副本,并根据你的需要命名:- 在非 Windows 系统上:
cp $(command -v node) hello- 在 Windows 上:
node -e "require('fs').copyFileSync(process.execPath, 'hello.exe')".exe扩展名是必要的。 -
移除二进制文件的签名(仅限 macOS 和 Windows):
- 在 macOS 上:
codesign --remove-signature hello- 在 Windows 上(可选):
签名工具 可以从已安装的 Windows SDK 使用。如果跳过此步骤,请忽略来自 postject 的任何与签名相关的警告。
signtool remove /s hello.exe -
通过运行
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