Jak uzyskać" codesigned " gdb na OSX?

Ponieważ potrzebuję obsługi Pythona gdb, zainstalowałem inną wersję przez

brew tap homebrew/dupes
brew install gdb

Chcę użyć tego {[2] } z Eclipse CDT, gdzie w Ustawieniach debugowania wpisałem ścieżkę do pliku binarnego. Jednak uruchomienie programu do debugowania nie powiodło się z następującym komunikatem:

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))

Co w tym kontekście oznacza "codesigned"? Jak mogę uruchomić to gdb?

Author: Matt, 2012-12-17

7 answers

Wydaje się, że musisz podpisać plik wykonywalny. Zobacz te linki, aby uzyskać więcej informacji. Powinieneś mieć możliwość samodzielnego podpisywania, jeśli nie planujesz redystrybucji tej wersji 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

Alternatywnie, ty może wyłączyć podpisywanie kodu w systemie, chociaż stanowi to zagrożenie bezpieczeństwa. W tym celu spróbuj uruchomić sudo spctl --master-disable W Terminalu.

 3
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-11 20:44:30

I. 1 kodowanie debuggera

Jądro Darwina wymaga, aby debugger miał specjalne uprawnienia zanim zostanie dozwolone kontrolowanie innych procesów. Uprawnienia te są przyznawany przez kodowanie pliku wykonywalnego GDB. Bez tych uprawnień, debugger zgłosi komunikaty o błędach, takie jak:

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))

Kodowanie wymaga certyfikatu. Poniższa procedura wyjaśnia, jak go utworzyć:

  • Uruchom aplikację Keychain Access (w / Applications / Utilities / Keychain Access.app)
  • Wybierz Brelok Dostęp - > Asystent certyfikatu - > Utwórz certyfikat... menu
  • Then:
    • wybierz nazwę dla nowego certyfikatu (ta procedura będzie używać "gdb-cert" jako przykład)
    • Ustaw "typ tożsamości" NA "Self Signed Root"
    • Ustaw "typ certyfikatu "na"podpisywanie kodu"
    • aktywuj opcję "Pozwól mi zastąpić domyślne"
  • Kliknij kilka razy na "Kontynuuj" aż do " Określ wyświetlony zostanie ekran "lokalizacja certyfikatu", a następnie Ustaw" Keychain "na"System"
  • kliknij "Kontynuuj", aż do utworzenia certyfikatu
  • na koniec, w widoku, kliknij dwukrotnie na nowy certyfikat i ustaw "When using ten certyfikat " do "zawsze ufaj"
  • zamknij aplikację Keychain Access i uruchom ponownie komputer (niestety jest to wymagane)

Po utworzeniu certyfikatu debugger może być codesigned as za mną. W terminalu uruchom następujące polecenie...

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

... gdzie "gdb-cert" należy zastąpić rzeczywistą nazwą certyfikatu wybrany powyżej i powinien zostać zastąpiony przez miejsce, w którym zainstalowałeś GNAT.

źródło: https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html

Aktualizacja: High-Sierra (Asystent certyfikatu-nieznany Błąd) https://apple.stackexchange.com/questions/309017/unknown-error-2-147-414-007-on-creating-certificate-with-certificate-assist

 86
Author: Zak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-01 21:20:46

Zrobiłem gdb działa na OSX 10.9 bez kodowania w ten sposób (opisane TUTAJ):

  1. Zainstaluj gdb za pomocą macports. (być może możesz go pominąć)

  2. Sudo nano / System / Library/LaunchDaemons / com.jabłko.zadania.plist

    Zmień łańcuch opcji z -s na -sp w linii 22, col 27.

  3. Zrestartuj komputer.

  4. Użyj gdb

 5
Author: klm123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-18 12:54:05

To bardzo stary temat, ale dodaję odpowiedź, ponieważ z wielu dostępnych instrukcji tylko jedna zawierała właściwe kroki, aby debugger z własnym podpisem działał.

Musisz utworzyć własny certyfikat główny, a następnie podpisać nim plik wykonywalny gdb, ale wiele osób narzekało, że nie działa dla nich. Ja też nie, dopóki nie natknąłem się na ten link .

Kluczowym punktem brakującym w innych podręcznikach jest to, że musisz ponownie uruchomić Twój komputer, aby zmiany weszły w życie. Kiedy to zrobiłem, wszystko działało zgodnie z przeznaczeniem.

Mam nadzieję, że to pomoże innym.

 3
Author: skh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-30 21:13:08

Sprawdź zaufanie cert, musi być zaufany do podpisywania kodu (na yosemite, który jest trzecim ostatnim w sekcji zaufanie widoku cert w dostępie do pęku kluczy).

Na początku cert nie był znany z kodowania do pęku kluczy, ponieważ brakowało celu rozszerzenia "podpisywanie kodu", możesz to znaleźć, jeśli zajrzysz do pęku kluczy i dwukrotnie klikniesz na certyfikat:

Tutaj wpisz opis obrazka

Naprawiłem to:

Tutaj wpisz opis obrazka

Wtedy Ja dodano certyfikat do zaufanych certyfikatów podpisywania, po przeciągnięciu i upuszczeniu certyfikatu z pęku kluczy na mój pulpit, co utworzyło ~ / Desktop / gdb-cert.cer:

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

To było trochę trudne, ponieważ zostałem wprowadzony w błąd przez niektóre posty internetowe i nie zaglądałem na stronę podręcznika. Niektórzy mówili, że powinieneś użyć add-trust (https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt ). najgorsze było to, że polecenie powiodło się, ale nie zrobiło tego, co "powinno" (dobrze, to była zła Komenda, ale powinna mi powiedzieć, że jest zła).

Potem znalazłem nowy cert w zaufanych certach jak tak:

$ 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

W moim przypadku certyfikat apple jest wygasły, ale ten, którego używałem do podpisywania gdb nie był (cóż, sam go stworzyłem). Należy również pamiętać, że zasady są inaczej nazwane dla polecenia "security add-trusted-cert" (- p codeSign) i polecenia "security find-identity" (- P codesign). Następnie podpisałem gdb i zawsze got:

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

Ponieważ miałem wrażenie, że musiałem podać nazwę pliku cert opcji --sign, ale w rzeczywistości był to CN certyfikatu, który powinienem był dostarczyć i powinien być w sklepie zaufania. CN można znaleźć tutaj po dwukrotnym kliknięciu na cert w breloku:

Tutaj wpisz opis obrazka

Lub w powyższym wyjściu "security find-identity-P codessigning". Potem podpisałem i musiałem dać mu prawo brelok:

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

Musiałem wprowadzić hasło roota, aby umożliwić dostęp do pęku kluczy.

To dało mi działające gdb i powinno dać ci podpisaną aplikację.

 3
Author: user637338,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-03 15:39:36

Skończyło się na tym, że musiałem podążać tymi wskazówkami zamiast wskazówkami sugerowanymi przez innych.

Nadal nie jestem pewien, czy to był akt killall taskgated lub proces włączania użytkownika root, który zrobił różnicę.

Niektórzy mówili, że ponowne uruchomienie jest konieczne. Uważam, że z powyższymi instrukcjami, może tak nie być.

Dokonałem również zmiany zalecanej przez @klm123, więc to również mogło się przyczynić.

Zauważ, że używam homebrew, nie macports.

 3
Author: Doctor Mohawk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-22 15:18:52

Jeśli użycie {[1] }nie jest trudnym wymogiem, możesz również użyć lldb jako alternatywy. Jest już w Twoim systemie i nie musi być podpisany kodem:

$ 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)

Oto tabela konwertująca gdb na lldb polecenia http://lldb.llvm.org/lldb-gdb.html

 2
Author: Schneems,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-19 23:25:41