Как кодировать GDB на OS X Mojave?

После установки 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 (через доморощенный)

  • Добавил моего пользователя в _developer группа; не помогло

  • Попытка перезагрузки моей машины и sudo killall taskgated но безрезультатно

  • Попытался установить более раннюю версию GDB (8.0.1), но получил тот же результат

0 ответов

Я обнаружил, что если я сначала следовал этим инструкциям для создания сертификата ДО попытки выполнить инструкции по подписанию GDB, я смог заставить его работать. Единственным исключением является то, что мне пришлось хранить сертификат в системной связке ключей, а не возвращать его обратно в систему.

Вот сводный набор шагов:

Создание сертификата с правильными разрешениями

  1. Launch /Applications/Utilities/Keychain Access.app
  2. В Доступе цепочки для ключей выберите цепочку для ключей входа в систему в списке "Связки ключей" в верхнем левом углу окна.
  3. Выберите следующий пункт меню:
    • Keychain Access-> Certificate Assistant-> Создать сертификат...
  4. Установите следующие настройки:
    • Name = "gdb-cert"
    • Тип удостоверения = Самоподписанный корень
    • Тип сертификата = кодовая подпись
    • Нажмите Создать
    • Можно настроить срок годности (3650 дней = 10 лет)
    • Нажмите Продолжить
    • Нажмите Готово
  5. Нажмите на "Мои сертификаты"
  6. Дважды щелкните по вашему новому сертификату "gdb-cert"
  7. Отверните раскрывающий треугольник "Доверие", перейдите к раскрывающемуся меню "Доверие в коде" и выберите "Всегда доверять" и выполните проверку подлинности, используя необходимые имя пользователя и пароль.
  8. Перетащите новый сертификат подписи кода "gdb-cert" (не открытый или закрытый ключи с тем же именем) из цепочки для ключей "login" в цепочку для ключей "System" на панели цепочек для ключей в левой части главного окна Keychain Access., Это переместит этот сертификат в "Системную" связку ключей. Вам нужно будет авторизоваться еще несколько раз, установите "Всегда доверять" при запросе.
  9. В графическом интерфейсе доступа к связке ключей щелкните и перетащите "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 -> должно показывать, что для этого сертификата включена настройка доверия подписи кода (могут отображаться другие сертификаты / разрешения)

Создание файла "authorlements.xml":

Скопируйте приведенный ниже текст и сохраните его в файле "authorlements.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>
</pre>

Подписание двоичных файлов отладчика

Выполните следующие команды в терминале:

  1. codesign --entitlements entitlements.xml -fs gdb-cert $(which gdb) -> кодовый знак с правами
  2. codesign -vv $(which gdb) -> проверить кодировку
  3. codesign -d --entitlements - $(which gdb) -> отобразить детали подписи кода

Обновить системные сертификаты

Перезагрузите машину

Другие вопросы по тегам