如何在 OS X Mojave 上对 gdb 进行协同设计?

如何在 OS X Mojave 上对 gdb 进行协同设计?

从 homebrew 安装 gdb 后(通过$ brew install gdb),我按照这些说明授予 gdb 附加到进程的权限。

当我到达运行命令的步骤时:

$ codesign --entitlements gdb-entitlement.xml -fs gdb-cert $(which gdb)

我收到以下错误,退出代码为 1:

/usr/local/bin/gdb: errSecInternalComponent

我无法弄清楚哪里出了问题,因此无法继续安装可用的 gdb 版本。有什么帮助吗?

额外信息:

  • Mac OS X 版本 10.14.4

  • GDB 版本 8.3(通过 homebrew)

  • 将我的用户添加到_developer组中;没有帮助

  • 尝试重新启动我的机器,但sudo killall taskgated无济于事

  • 尝试安装早期版本的 GDB(8.0.1),但得到相同的结果

答案1

我发现如果我首先关注这些说明在尝试完成之前创建证书gdb 签名说明,我能够让它工作。唯一的例外是我必须将证书保留在系统钥匙串中,而不是将其移回登录。

以下是一组合并的步骤:

使用正确的权限创建证书

  1. 启动 /Applications/Utilities/Keychain Access.app
  2. 在钥匙串访问中,选择窗口左上角“钥匙串”列表中的“登录”钥匙串。
  3. 选择以下菜单项:
    • 钥匙串访问->证书助理->创建证书...
  4. 设置以下设置:
    • 名称 =“gdb-cert”
    • 身份类型 = 自签名根
    • 证书类型 = 代码签名
    • 单击“创建”
    • 可以自定义有效期(3650天=10年)
    • 点击“继续”
    • 点击完成
  5. 点击“我的证书”
  6. 双击新的“gdb-cert”证书
  7. 向下翻转“信任”三角形,滚动到“代码签名”信任下拉菜单并选择“始终信任”,然后根据需要使用您的用户名和密码进行身份验证。
  8. 将新的“gdb-cert”代码签名证书(不是同名的公钥或私钥)从“登录”钥匙串拖到主钥匙串访问窗口左侧的钥匙串窗格中的“系统”钥匙串。这会将此证书移动到“系统”钥匙串。您需要再授权几次,并在询问时将其设置为“始终受信任”。
  9. 在 Keychain Access GUI 中,单击“System”钥匙串中的“gdb-cert”并将其拖到桌面上。拖动将创建一个“~/Desktop/gdb-cert.cer”文件,用于下一步。
  10. 切换到终端并运行以下命令:
    1. sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer
    2. rm -f ~/Desktop/gdb-cert.cer
  11. 将“gdb-cert”证书从“系统”钥匙串拖回到“登录”钥匙串(也许再拖回来……?)编辑:根据评论,显然没有必要
  12. 退出钥匙串访问
  13. 重启

检查证书:

  1. security find-certificate -c gdb-cert-> 如果可以找到该证书,则应显示一些详细信息
  2. security find-certificate -p -c gdb-cert | openssl x509 -checkend 0-> 应该说证书不会过期
  3. security dump-trust-settings -d-> 应显示此证书已启用代码签名信任设置(可能显示其他证书/权限)

创建“entitlements.xml”文件:

复制以下文本并将其保存在当前目录中的“entitlements.xml”文件中。

<?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.debugger</key>
    <true/>
</dict>
</plist>

对调试器二进制文件进行签名

在终端中运行以下命令:

  1. codesign --entitlements entitlements.xml -fs gdb-cert $(which gdb)-> 与权利共同设计
  2. codesign -vv $(which gdb)-> 验证代码签名
  3. codesign -d --entitlements - $(which gdb)-> 显示代码签名的详细信息

刷新系统证书

重启机器

相关内容