Как получить & quot; подписанный кодом & quot; GDB на OSX?

Потому что мне нужен Python с поддержкой gdbЯ установил другую версию через

brew tap homebrew/dupes
brew install gdb

Я хочу использовать это gdb с Eclipse CDT, где я ввел путь к бинарному файлу в настройках отладки. Однако запуск программы для отладки завершается неудачно со следующим сообщением:

Error in final launch sequence
Failed to execute MI command:
-exec-run
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Бег?

38

Решение

Казалось бы, вам нужно подписать исполняемый файл. Смотрите эти ссылки для получения дополнительной информации. Вы должны иметь возможность сойти с себя, если вы не планируете распространять эту версию gdb,

https://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html

https://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/codesign.1.html

Кроме того, вы можете отключить подпись кода в вашей системе, хотя это представляет угрозу безопасности. Для этого попробуйте запустить sudo spctl --master-disable в Терминале.

3

Другие решения

I.1 Совместная разработка отладчика

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

Starting program: /x/y/foo
Unable to find Mach task port for process-id 28885: (os/kern) failure (0x5).
(please check gdb is codesigned - see taskgated(8))

Codesigning требует сертификата. Следующая процедура объясняет, как ее создать:

  • Запустите приложение Keychain Access (в / Applications / Utilities / Keychain Access.app)
  • Выберите брелок
    Access -> Certificate Assistant -> Создать сертификат … меню
  • Затем:
    • Выберите имя для нового сертификата (эта процедура будет использовать
      «gdb-cert» в качестве примера)
    • Установите для «Identity Type» значение «Self Signed Root»
    • Установите «Тип сертификата» на «Подписание кода»
    • Активируйте опцию «Разрешить переопределение по умолчанию»
  • Нажмите несколько раз на «Продолжить», пока не появится «Указать»
    Появится экран «Расположение для сертификата», затем установите «Связка ключей» в «Система»
  • Нажимайте «Продолжить», пока сертификат не будет создан.
  • Наконец, в представлении дважды щелкните новый сертификат и установите «При использовании».
    этот сертификат «Всегда» Доверяй «
  • Закройте приложение Keychain Access и перезагрузите компьютер (это, к сожалению, необходимо)

После создания сертификата отладчик может быть помечен как
следовать. В терминале выполните следующую команду …

codesign -f -s  "gdb-cert"  <gnat_install_prefix>/bin/gdb

… где «gdb-cert» должен быть заменен фактическим названием сертификата
выбранный выше, и должен быть заменен
место, где вы установили GNAT.

источник: https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html

ОБНОВИТЬ: High-Sierra (помощник по сертификации — неизвестная ошибка)
https://apple.stackexchange.com/questions/309017/unknown-error-2-147-414-007-on-creating-certificate-with-certificate-assist

86

Я заставил GDB работать на OSX 10.9 без кодирования таким образом (описано Вот):

  1. Установите GDB с MacPort. (может быть, вы можете пропустить это)

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

    изменить строку параметров с -s в -sp в строке 22, столб 27.

  3. перезагрузите компьютер.

  4. Используйте GDB

5

Это очень старая тема, но я добавляю ответ, потому что из многих доступных инструкций только одна содержала только правильные шаги, чтобы заставить работать самоподписанный отладчик.

Вы должны создать самозаверяющий корневой сертификат и затем подписать с ним исполняемый файл gdb, но многие люди жаловались, что он не работает для них. Ни один не сделал это для меня, пока я не наткнулся на эта ссылка.

Ключевым моментом, который отсутствует в других руководствах, является то, что вы должен перезагрузить ваш компьютер, чтобы изменения вступили в силу. Как только я это сделал, все заработало как задумано.

Надеюсь, это поможет другим.

3

Проверьте доверие к сертификату, оно должно быть доверенным для подписи кода (на yosemite, который является третьим последним в разделе доверия в представлении сертификата в доступе цепочки для ключей).

Сначала сертификат не был известен кодовой подписью к цепочке для ключей, потому что отсутствовала цель Расширения «Подписывание кода», вы можете найти это, если вы посмотрите на цепочку для ключей и дважды щелкните по сертификату:

введите описание изображения здесь

Я исправил это:

введите описание изображения здесь

Затем я добавил сертификат в доверенные сертификаты подписи, после того как у меня было&удалил сертификат из цепочки для ключей на мой рабочий стол, который создал ~ / Desktop / gdb-cert.cer:

$ sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer

Это было немного сложно, потому что некоторые интернет-сообщения вводили меня в заблуждение, и я не смотрел страницу руководства. Некоторые говорили, что вы должны использовать add-trust (https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt). Страшным было то, что команда преуспела, но не сделала то, что «должна» (ну, это была неправильная команда, но она должна была сказать мне, что она была неправильной).

После этого я нашел новый сертификат в доверенных сертификатах, например, так:

$ security find-identity -p codesigning

Policy: Code Signing
Matching identities
1) E7419032D4..... "Mac Developer: FirstName LastName (K2Q869SWUE)"    (CSSMERR_TP_CERT_EXPIRED)
2) ACD43B6... "gdb-cert"2 identities found

Valid identities only
1) ACD43... "gdb-cert"1 valid identities found

В моем случае срок действия сертификата Apple истек, но тот, который я использовал для подписи gdb, не был (ну, я просто создал его сам). Также имейте в виду, что политика называется по-разному для «security add-trust-cert» (- p codeSign) и команды «security find-identity» (-p codeigning). Затем я продолжил подписывать GDB, и я также всегда получал:

$ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb`
gdb-cert.cer: no identity found

потому что у меня сложилось впечатление, что мне нужно было указать имя файла сертификата для параметра —sign, но на самом деле это был CN сертификата, который я должен был предоставить и должен быть в хранилище доверенных сертификатов. Вы можете найти CN здесь, дважды щелкнув по сертификату в цепочке для ключей:

введите описание изображения здесь

или в приведенном выше выводе «security find-identity -p codesigning». Затем я продолжил подписывать, и я должен был дать ему правильный брелок:

 codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb`

Мне пришлось ввести пароль root, чтобы разрешить доступ к связке ключей.

Это тогда дало мне рабочий GDB, и это должно дать вам подписанное приложение.

3

Я должен был следовать эти направления вместо указаний, предложенных другими.

Я до сих пор не уверен, что это был акт killall taskgated или процесс включения пользователя root, который сделал разницу.

Некоторые говорят, что перезагрузка необходима. Я считаю, что с приведенными выше инструкциями, это может быть не так.

Я также внес изменение, рекомендованное @ klm123, так что это также может помочь.

Обратите внимание, что я использую homebrew, а не macports.

3

При использовании gdb это не сложное требование, вы также можете использовать lldb как альтернатива. Он уже есть в вашей системе и не требует подписи кода:

$ lldb stddev_bugged
(lldb) target create "stddev_bugged"Current executable set to 'stddev_bugged' (x86_64).
(lldb) b mean_and_var
Breakpoint 1: where = stddev_bugged`mean_and_var + 17 at stddev_bugged.c:17, address = 0x0000000100000b11
(lldb) r
Process 1621 launched: '/Users/richardschneeman/Documents/projects/21stCentury/02/example-00/stddev_bugged' (x86_64)
Process 1621 stopped
* thread #1: tid = 0xc777, 0x0000000100000b11 stddev_bugged`mean_and_var(data=0x00007fff5fbff590) + 17 at stddev_bugged.c:17, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000100000b11 stddev_bugged`mean_and_var(data=0x00007fff5fbff590) + 17 at stddev_bugged.c:17
14   typedef struct meanvar {double mean, var;} meanvar;
15
16   meanvar mean_and_var(const double *data){
-> 17       long double avg = 0,
18             avg2 = 0;
19       long double ratio;
20       size_t count= 0;
(lldb)

Вот таблица преобразования gdb в lldb команды http://lldb.llvm.org/lldb-gdb.html

2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector