Как кодировать 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, я смог заставить его работать. Единственным исключением является то, что мне пришлось хранить сертификат в системной связке ключей, а не возвращать его обратно в систему.
Вот сводный набор шагов:
Создание сертификата с правильными разрешениями
- Launch /Applications/Utilities/Keychain Access.app
- В Доступе цепочки для ключей выберите цепочку для ключей входа в систему в списке "Связки ключей" в верхнем левом углу окна.
- Выберите следующий пункт меню:
- Keychain Access-> Certificate Assistant-> Создать сертификат...
- Установите следующие настройки:
- Name = "gdb-cert"
- Тип удостоверения = Самоподписанный корень
- Тип сертификата = кодовая подпись
- Нажмите Создать
- Можно настроить срок годности (3650 дней = 10 лет)
- Нажмите Продолжить
- Нажмите Готово
- Нажмите на "Мои сертификаты"
- Дважды щелкните по вашему новому сертификату "gdb-cert"
- Отверните раскрывающий треугольник "Доверие", перейдите к раскрывающемуся меню "Доверие в коде" и выберите "Всегда доверять" и выполните проверку подлинности, используя необходимые имя пользователя и пароль.
- Перетащите новый сертификат подписи кода "gdb-cert" (не открытый или закрытый ключи с тем же именем) из цепочки для ключей "login" в цепочку для ключей "System" на панели цепочек для ключей в левой части главного окна Keychain Access., Это переместит этот сертификат в "Системную" связку ключей. Вам нужно будет авторизоваться еще несколько раз, установите "Всегда доверять" при запросе.
- В графическом интерфейсе доступа к связке ключей щелкните и перетащите "gdb-cert" в цепочке ключей "Система" на рабочий стол. Перетаскивание создаст файл "~/Desktop/gdb-cert.cer", используемый на следующем шаге.
- Переключитесь на Терминал и выполните следующее:
sudo security add-trust -d -r trustRoot -p basic -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer
rm -f ~/Desktop/gdb-cert.cer
- Перетащите сертификат "gdb-cert" из цепочки ключей "Система" обратно в цепочку ключей входа в систему (и, может быть, снова...?)
- Выйти из цепочки для ключей
- перезагрузка
Проверка сертификата:
security find-certificate -c gdb-cert
-> должен показать некоторые подробности о сертификате, если он может быть найденsecurity find-certificate -p -c gdb-cert | openssl x509 -checkend 0
-> Должен сказать, что сертификат не истекает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>
Подписание двоичных файлов отладчика
Выполните следующие команды в терминале:
codesign --entitlements entitlements.xml -fs gdb-cert $(which gdb)
-> кодовый знак с правамиcodesign -vv $(which gdb)
-> проверить кодировкуcodesign -d --entitlements - $(which gdb)
-> отобразить детали подписи кода
Обновить системные сертификаты
Перезагрузите машину