macOS Mojave: Как добиться кодировки для включения отладки (gdb)? - PullRequest
0 голосов
/ 08 октября 2018

Существует множество тем, посвященных вопросам кодирования в macOS, начиная с 10.5.Я хотел добиться того, чтобы Geany работал с отладчиком GNU (gdb).Отладчик найден в geany, но (уже довольно известное) сообщение об ошибке:

Error message from debugger back end:
Unable to find Mach task port for process-id 39847: (os/kern) failure (0x5).\n (please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 39847: (os/kern) failure (0x5).\n (please check gdb is codesigned - see taskgated(8))

Как правило, существует множество ограничений, позволяющих считать, что (следует) разрешить использование gdb, например, gdb 8.0.1 может работать, gdb 8.1 не будет работать вообще - см. здесь , также подтверждено в Lazarus Wiki.

0) Я создал свой сертификат "gdb-cert" в соответствии с шагами, описанными в различных инструкциях.Пример здесь

1) Я выполнил шаги по кодированию подписи исполняемого файла GDB (источник: GDB и Stackoverflow ), который находится в моемcase под

/ usr / local / Cellar / gdb / 8.0.1 / bin / gdb

(обратите внимание, что в некоторых языках есть проблемы с 8.1 - pascalтоже).Если вы хотите убедиться, что код подписан, выберите

$ codesign -vvvv  gdb

в соответствующем каталоге.У меня есть.

2) Убедитесь, что сертификат действительно был назначен, чтобы иметь право на подпись кода - это в моем случае.Он также является доверенным - что необходимо.

3) Я также попробовал другой способ запустить gdb, описанный выше, где файл был отредактирован (обратите внимание, что SIP должен быть отключен в процессе восстановления !!!!) Модификации работают, только если в восстановлении используется csrutil disable.

sudo nano /System/Library/LaunchDaemons/com.apple.taskgated.plist

Разрушительная вещь, после этого шага редактор кода не запустится снова (!!), пока это изменение не будет отменено (Geany, Atom, текстовый редактор, MS Visual Studio - все сломано после вставки -sp в файл)

4) В некоторых темах я обнаружил, что отладка будет толькоработать, если при восстановлении используется команда csrutil enable --withouth debug.Это ничего не изменило.

В итоге я получил:

сертификат для кодовой подписи файл gdb, который можно подписать согласно моему заявлениювыше файл com.apple.taskgated.plist, не заполнивший атрибут string -sp

Я был бы очень признателен, если бы кто-нибудь мог подтвердить это поведение, решение этого даже более:)

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Это относится к правам на кодовый знак.Вы должны добавить ключ "com.apple.security.cs.debugger" в процессе подписания.

например, вы должны изменить codesign -fs gdbcert /usr/local/bin/gdb на codesign --entitlements gdb.xml -fs gdbcert /usr/local/bin/gdb.

gdb.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>
0 голосов
/ 02 января 2019

Команда log полезна для устранения проблем с подписью кода.Вот что я использовал (в Мохаве):

log stream --predicate 'process == "taskgated" OR (process == "kernel" AND eventMessage CONTAINS "macOSTaskPolicy")' --info

0 голосов
/ 15 октября 2018

Я не изменял com.apple.taskgated.plist, поэтому никаких проблем ни с одним из перечисленных вами текстовых редакторов.Однако исправление, которое я использую, к сожалению, требует от меня запуска gdb с sudo (который мне не понадобился для исправления, которое я имел на High Sierra).Не использую Geany, но это слегка измененные шаги, которые я использовал для gdb на Mac Mojave (благодаря оригинальному автору, опубликовавшему инструкции для High Sierra):

  1. Выполнить brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb.
  2. Далее следует brew pin gdb
  3. Открыть Доступ к цепочке для ключей
  4. В меню откройте Доступ к цепочке для ключей> Помощник по сертификатам> Создать сертификат
  5. Дайте ему имя (например, gdbcert)
  6. Тип идентификации: Самоподписанный корень
  7. Тип сертификата: Кодовая подпись
  8. Проверка: Разрешить переопределение по умолчанию
  9. Продолжить с настройками по умолчанию до Указать местоположение для
  10. Установить расположение цепочки для ключей всистема.Если это приводит к следующей ошибке: Certificate Error: Unknown Error =-2,147,414,007 Установите местоположение для входа в систему, разблокируйте систему, щелкнув по замку в верхнем левом углу и перетащите сертификат gdbcert в системную связку ключей .
  11. Найти сертификат в Системная цепочка для ключей .
  12. Двойной щелчок сертификата.
  13. Развернуть Доверие , установить Подпись кода Всегда доверять
  14. Перезапустить задание, запущенное в терминале: sudo killall taskgated или, возможно, ps aux | grep taskgated, затем kill -9 <pid>
  15. Включить учетную запись root, выполнив следующие действия:
  16. Открыть Системные настройки
  17. Перейти к Пользователь и группы> Разблокировать
  18. Логин Параметры> Присоединиться (следующийк серверу сетевых учетных записей)
  19. Нажмите Откройте утилиту каталогов
  20. Перейдите на Редактировать> Включить пользователя Root
  21. Codesign gdb с помощьюВаш сертификат: codesign -fs gdbcert /usr/local/bin/gdb Я в конечном итоге использовал sudo killall taskgated && codesign -fs gdbcert /usr/local/bin/gdb
  22. Codesign аутентифицируется как пользователь root
  23. Завершите работу вашего Mac иперезапустите в режиме восстановления (удерживайте нажатой клавишу -R, пока не появится логотип Apple)
  24. Открыть окно терминала
  25. Изменить защиту целостности системы, чтобы разрешить отладку: csrutil enable --without debug
  26. Перезагрузить компьютер Mac,Отладка с gdb теперь должна работать как положено.
  27. Выполнить gdb с sudo;например sudo gdb -q ./a.out
...