Comment obtenir un" codesigned " gdb sur OSX?

parce que j'ai besoin d'une version Python gdb , j'ai installé une autre version via

brew tap homebrew/dupes
brew install gdb

je veux utiliser ce gdb avec Eclipse CDT, où j'ai entré le chemin vers le binaire dans les paramètres de débogage. Cependant, le lancement d'un programme de débogage échoue avec le message suivant:

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

que signifie" codesigned " dans ce contexte? Comment puis-je faire fonctionner ce gdb ?

37
demandé sur Matt 2012-12-17 16:03:01

7 réponses

il semblerait que vous ayez besoin de signer l'exécutable. Voir ces liens pour plus d'informations. Vous devriez pouvoir vous en tirer avec l'auto-signature si vous ne prévoyez pas de redistribuer cette version de 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

vous pouvez également désactiver la signature de code sur votre système, bien que cela présente un risque pour la sécurité. Pour ce faire, essayez d'exécuter sudo spctl --master-disable dans le Terminal.

3
répondu Matt 2015-06-11 20:44:30

I. 1 Codesigning the Debugger

le noyau Darwin exige que le débogueur ait des permissions spéciales avant d'être autorisé à contrôler d'autres processus. Ces autorisations sont accordé en codésignant l'exécutable GDB. Sans ces autorisations, le débogueur signalera des messages d'erreur tels que:

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 exige un certificat. La procédure suivante explique comment créer un:

  • Démarrer l'application Trousseau d'Accès (dans /Applications/Utilitaires/Trousseau d'Accès.app)
  • sélectionnez le porte-clés Accès - > Assistant de certificat - > créer un certificat... menu
  • alors:
    • choisir un nom pour le nouveau certificat (cette procédure utilisera "gdb-cert "comme exemple)
    • mettre "Type D'identité" à "racine Auto-signée"
    • mettre "Type de certificat" à "signature de Code "
    • activer l'option "Laissez-moi outrepasser par défaut
  • Cliquez plusieurs fois sur "Continuer" jusqu'à ce que le "spécifier un emplacement pour le certificat "écran apparaît, puis mettre "Porte-Clés" à "système "
  • cliquez sur" Continuer " jusqu'à ce que le certificat soit créé
  • Enfin, dans la vue, double-cliquez sur le nouveau certificat, "Lors de l'utilisation de ce certificat", "Toujours faire Confiance"
  • Quitter l'application Trousseau d'Accès et de redémarrer l'ordinateur (ce qui est malheureusement nécessaire)

une fois qu'un certificat a été créé, le débogueur peut être codé comme suit: suivre. Dans un Terminal, exécutez la commande suivante...

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

... où "gdb-cert" doit être remplacé par le nom de certificat choisis ci-dessus, et devrait être remplacé par le emplacement où vous avez installé GNAT.

source: https://gcc.gnu.org/onlinedocs/gcc-4.8.1/gnat_ugn_unw/Codesigning-the-Debugger.html

mise à JOUR: High Sierra (Certificat d'Assistant - Erreur Inconnue) https://apple.stackexchange.com/questions/309017/unknown-error-2-147-414-007-on-creating-certificate-with-certificate-assist

86
répondu Zak 2018-03-01 21:20:46

j'ai fait travailler gdb sur OSX 10.9 sans codesigner de cette façon (décrit ici ):

  1. installez gdb avec macports. (peut-être Pouvez-vous le sauter)

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

    changer la chaîne d'options de -s à -sp à la ligne 22, col 27.

  3. redémarre l'ordinateur.

  4. Utiliser gdb

5
répondu klm123 2013-11-18 12:54:05

c'est un sujet très ancien, mais j'ajoute une réponse, parce que parmi les nombreuses instructions disponibles, une seule contenait juste les bonnes étapes pour faire fonctionner un débogueur auto-signé.

vous devez créer un certificat racine auto-signé et ensuite signer l'exécutable gdb avec lui, mais beaucoup de gens se sont plaints que cela n'a pas fonctionné pour eux. Ni l'un ni l'autre ne l'a fait pour moi jusqu'à ce que je suis tombé sur ce lien .

le point clé manquant dans d'autres Manuels est que vous devez redémarrer votre ordinateur pour que les changements prennent effet. Une fois que j'ai fait ça, tout a fonctionné comme prévu.

j'espère que cela aidera les autres.

3
répondu skh 2013-05-30 21:13:08

vérifier la confiance du cert, il doit être fiable pour la signature de code (sur yosemite qui est la troisième dernière dans la section confiance de la vue cert dans l'accès porte-clés).

au début, le cert n'était pas connu pour coder le porte-clés, parce qu'il y avait le but de L'Extension "signature de Code" manquant, vous pouvez le trouver si vous regardez dans le porte-clés et double-cliquez sur le certificat:

enter image description here

j'ai fixé que:

enter image description here

puis j'ai ajouté le certificat aux certificats de signature de confiance, après avoir fait glisser et laissé tomber le certificat du porte-clés à mon bureau, qui a créé le ~/Desktop/gdb-cert.cer:

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

C'était un peu délicat parce que j'ai été induit en erreur par certains messages internet et que je n'ai pas regardé la page de manuel. Quelque dit que vous devez utiliser add-trust ( ) https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt ). Le plus terrible, c'est que la commande a réussi, mais n'a pas fait ce qu'elle "devrait" (bien, c'était la mauvaise commande, mais elle aurait dû me dire que c'était mal).

après que j'ai trouvé le nouveau cert dans les certs de confiance comme cela:

$ 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

dans mon cas le apple cert est expiré, mais celui que j'utilisais pour signer gdb n'était pas (eh bien, je viens de créer moi-même). Sachez également que la politique est nommé différemment pour la "sécurité add-confiance-cert"(-p codeSign) et la "sécurité de trouver l'identité de la commande" (- p codesigning). J'ai ensuite signé gdb et j'ai aussi toujours eu:

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

parce que j'avais l'impression que je devais donner le nom du fichier cert à l'option --sign, mais qu'en fait C'était la CN du certificat que j'aurais dû fournir et que je devrais être en fiducie stocker. Vous pouvez trouver le CN ici en double cliquant sur le cert dans le porte-clés:

enter image description here

ou au-dessus de la sortie de "sécurité trouver-identité-p codesigning". Puis je suis allé signer et j'ai dû lui donner le bon porte-clés:

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

j'ai dû entrer le mot de passe root pour permettre l'accès au porte-clés.

qui m'a ensuite donné un gdb de travail et il devrait vous donner une demande signée.

3
répondu user637338 2015-09-03 15:39:36

j'ai fini par avoir à suivre ces directions au lieu des directions suggérées par les autres.

Je ne sais toujours pas si c'est l'acte de killall taskgated ou le processus d'activation de l'utilisateur root qui a fait la différence.

certains ont dit qu'un redémarrage est nécessaire. Je conclus qu'avec les instructions ci-dessus, ce n'est peut-être pas le cas.

j'ai aussi fait le changement recommandé par @klm123, donc en mai ont également contribué.

notez que j'utilise homebrew, pas macports.

3
répondu Doctor Mohawk 2016-01-22 15:18:52

si l'utilisation de gdb n'est pas une exigence difficile, vous pouvez également utiliser lldb comme une alternative. Il est déjà sur votre système et n'a pas besoin d'être signé de code:

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

Voici une table convertissant gdb en lldb commandes http://lldb.llvm.org/lldb-gdb.html

2
répondu Schneems 2015-11-19 23:25:41