当前位置: 首页 > 知识库问答 >
问题:

node.js mac 重新签名运行报错?

黎征
2023-04-27

出于某种原因,我需要使用自己的苹果的开发者账号重新给node.js 签名。

使用了命令 codesign --deep --timestamp --options runtime -f -s 'Developer ID Application: xxxxxxxx' ~/Library/Keychains/login.keychain-db node
重新签名了node.

但是,执行签名后的node node -p 'process', 却报错了:

#
# Fatal error in , line 0
# Check failed: reservation_.SetPermissions(unprotect_start, unprotect_size, FLAG_write_code_using_rwx ? PageAllocator::kReadWriteExecute : PageAllocator::kReadWrite).
#
#
#
#FailureMessage Object: 0x7ff7bc3c2a50
 1: 0x103c7c5e2 node::NodePlatform::GetStackTracePrinter()::$_3::__invoke() [/usr/local/lib/gsf/bin/node]
 2: 0x104d68133 V8_Fatal(char const*, ...) [/usr/local/lib/gsf/bin/node]
 3: 0x103fbb4d4 v8::internal::MemoryChunk::SetCodeModificationPermissions() [/usr/local/lib/gsf/bin/node]
 4: 0x103f38f89 v8::internal::Heap::UnprotectAndRegisterMemoryChunk(v8::internal::MemoryChunk*, v8::internal::UnprotectMemoryOrigin) [/usr/local/lib/gsf/bin/node]
 5: 0x103f0c8ac v8::internal::Heap::AllocateRaw(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/usr/local/lib/gsf/bin/node]
 6: 0x103f3ed01 v8::internal::Heap::AllocateRawWithLightRetrySlowPath(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [/usr/local/lib/gsf/bin/node]
 7: 0x103f0b810 v8::internal::Factory::CodeBuilder::AllocateCode(bool) [/usr/local/lib/gsf/bin/node]
 8: 0x103f0afa9 v8::internal::Factory::CodeBuilder::BuildInternal(bool) [/usr/local/lib/gsf/bin/node]
 9: 0x103de1ea3 v8::internal::baseline::BaselineCompiler::Build(v8::internal::Isolate*) [/usr/local/lib/gsf/bin/node]
10: 0x103df4063 v8::internal::GenerateBaselineCode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>) [/usr/local/lib/gsf/bin/node]
11: 0x103e2e1c7 v8::internal::Compiler::CompileSharedWithBaseline(v8::internal::Isolate*, v8::internal::Handle<v8::internal::SharedFunctionInfo>, v8::internal::Compiler::ClearExceptionFlag, v8::internal::IsCompiledScope*) [/usr/local/lib/gsf/bin/node]
12: 0x103e2e553 v8::internal::Compiler::CompileBaseline(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>, v8::internal::Compiler::ClearExceptionFlag, v8::internal::IsCompiledScope*) [/usr/local/lib/gsf/bin/node]
13: 0x103dde048 v8::internal::baseline::BaselineBatchCompiler::CompileBatch(v8::internal::Handle<v8::internal::JSFunction>) [/usr/local/lib/gsf/bin/node]
14: 0x103dddf87 v8::internal::baseline::BaselineBatchCompiler::EnqueueFunction(v8::internal::Handle<v8::internal::JSFunction>) [/usr/local/lib/gsf/bin/node]
15: 0x1042f0861 v8::internal::(anonymous namespace)::BytecodeBudgetInterruptFromBytecode(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSFunction>) [/usr/local/lib/gsf/bin/node]
16: 0x1042ef453 v8::internal::Runtime_BytecodeBudgetInterruptFromBytecode(int, unsigned long*, v8::internal::Isolate*) [/usr/local/lib/gsf/bin/node]
17: 0x1046adff9 Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/usr/local/lib/gsf/bin/node]

有谁知道为什么重新签名后的 node, 运行会失败么?

有没有办法可以让node.js 重新签名?

共有1个答案

唐昊焜
2023-04-27

你可以用 --entitlements 参数来为你的签名提供一个包含相应权限的 .entitlements 文件。
先新建一个名为 node.entitlements 的文件:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
</dict>
</plist>

然后,在重新签名时添加 --entitlements 参数:

codesign --deep --timestamp --options runtime -f -s 'Developer ID Application: xxxxxxxx' --entitlements node.entitlements ~/Library/Keychains/login.keychain-db node
 类似资料:
  • 我使用maven-surefire-plugin内置功能使用了Flaky测试重新运行机制。此外,我还基于而不是添加了cucumber依赖项。它们都有自己版本的cucumber-java和cucumber-jvm依赖项。 现在,我需要另一个运行程序,其中包含以下代码(根据StackOverflow上的其他论坛和线程) 但我不需要有这个第二个跑者,因为重新运行机制工作绝对出色,只有一个跑者在顶部。ma

  • 我正在使用Android Studio Arctic Fox | 2020.3。1 Canary 14 Build和我的一个项目在选项卡中缺少选项,我们使用该选项卡立即获得应用程序签名以进行调试,我以为它在这个新的IDE版本中被删除了,但在打开另一个项目时它仍然存在。仅显示模块及其依赖项列表。

  • 本文向大家介绍Android Apk去掉签名以及重新签名的方法,包括了Android Apk去掉签名以及重新签名的方法的使用技巧和注意事项,需要的朋友参考一下 Android Apk去掉签名以及重新签名的方法 Android开发中很重要的一部就是用自己的密钥给Apk文件签名,不经过签名的Apk文件一般是无法安装的,就算装了最后也是失败。 网上流传的“勾选允许安装未知来源的应用”其实跟签不签名没啥关

  • 前言 随着区块链等相关技术的创新和突破,很多有形或无形资产都将实现去中心化,数字资产将无处不在。比如我们这里分享的 亿书 就是要把数字出版物版权进行保护,实现去中心化,解决业界多年来版权保护不力的难题。 无论数字资产,还是数字出版版权,都是有明确所有权的,当前实现数字资产所属的技术手段就是本篇要介绍的签名。而多重签名是对签名的扩展使用,给数字资产转移提供了安全保障和技术手段。本篇,从基本概念入手,

  • 本文向大家介绍给Android的APK程序签名和重新签名的方法,包括了给Android的APK程序签名和重新签名的方法的使用技巧和注意事项,需要的朋友参考一下 签名工具的使用 Android源码编译出来的signapk.jar既可给apk签名,也可给rom签名的。使用格式: -w 是指对ROM签名时需使用的参数 publickey.x509[.pem] 是公钥文件 privatekey.pk8 是

  • 我尝试多次使用itext 5.5.13.1模拟不同用户的签名对文档进行签名,PdfStamper位于AppendMode上。如果文档没有签名,则证书级别为CERTIFIED_NO_CHANGES_ALLOWED或CERTIFIED_FORM_FILLING_AND_ANNOTATIONS,否则我不会为PdfSignatureAppearnce设置此参数。第二次签名后,第一次签名无效,因为文档已更改