it-swarm.com.de

macOS Mojave: Wie man Codesign erreicht, um das Debugging (gdb) zu ermöglichen

Es gibt viele Themen, die sich mit CodeSign-Problemen mit macOS beschäftigen (ab 10.5 ..). Was ich erreichen wollte, ist, Geany mit dem GNU Debugger (gdb) zusammenarbeiten zu lassen. Der Debugger wird in geany gefunden, aber die (bereits bekannte) Fehlermeldung lautet:

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

Im Allgemeinen gibt es viele Einschränkungen zu berücksichtigen, dass (sollte) die Verwendung von gdb, z. gdb 8.0.1 kann funktionieren, gdb 8.1 funktioniert überhaupt nicht - siehe hier , auch in Lazarus Wiki bestätigt.

0) Ich habe mein Zertifikat "gdb-cert" gemäß den in den verschiedenen Anweisungen beschriebenen Schritten erstellt. Beispiel hier

1) Ich habe die Schritte zur Codierung der ausführbaren Datei von gdb (Quelle: gdb und Stackoverflow ) befolgt, die sich in meinem Fall unter befindet 

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

(Hinweis: Es gibt auch Probleme mit 8.1 für einige Sprachen - auch für Pascal). Wenn Sie sicherstellen möchten, dass der Code signiert ist, klicken Sie auf

$ codesign -vvvv  gdb

im jeweiligen Verzeichnis. Meins ist.

2) Stellen Sie sicher, dass das Zertifikat tatsächlich für die Codesignierung zugewiesen wurde. Dies ist in meinem Fall der Fall. Es wird auch vertraut - was notwendig ist.

3) Ich habe auch versucht, die oben beschriebene gdb-Methode auszuführen, bei der die Datei bearbeitet wurde (bitte beachten Sie, dass SIP bei der Wiederherstellung zuerst deaktiviert werden muss !!!!) Änderungen funktionieren nur wenn csrutil disable bei der Wiederherstellung verwendet wird.

Sudo nano /System/Library/LaunchDaemons/com.Apple.taskgated.plist

Verheerende Sache, nach diesem Schritt würde kein Code-Editor erneut gestartet (!!), bis diese Änderung rückgängig gemacht wird (Geany, Atom, Texteditor, MS Visual Studio - alles gebrochen, nachdem -sp in die Datei eingefügt wurde)

4) In einigen Themen habe ich festgestellt, dass das Debuggen nur funktioniert, wenn der Befehl csrutil enable --withouth debug bei der Wiederherstellung verwendet wird. Daran hat sich nichts geändert.

Am Ende hatte ich:

  • ein Zertifikat zum Code-Zeichen
  • eine ausführbare gdb-Datei, die gemäß meiner obigen Erklärung signiert ist
  • eine Datei com.Apple.taskgated.plist, die das Zeichenfolge -sp-Attribut nicht aufgefüllt hat
  • Ich würde mich sehr freuen, wenn jemand dieses Verhalten bestätigen könnte, eine Lösung dafür noch mehr :)

    8
    codeG

    Dies hängt mit Codesign-Berechtigungen zusammen. Sie müssen den Schlüssel "com.Apple.security.cs.debugger" beim Signieren hinzufügen.

    zum Beispiel müssen Sie codesign -fs gdbcert /usr/local/bin/gdb in codesign --entitlements gdb.xml -fs gdbcert /usr/local/bin/gdb ändern.

    der Inhalt von gdb.xml muss in etwa dem folgenden Code entsprechen.

    <?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>
    
    15
    Sajjad Pourali

    Ich habe com.Apple.taskgated.plist Nicht geändert, sodass es keine Probleme mit den von Ihnen aufgelisteten Texteditoren gibt. Das Update, das ich verwende, erfordert leider, dass ich gdb mit Sudo starte (was ich für das Update auf High Sierra nicht brauchte). Ich benutze Geany nicht, aber dies sind die leicht modifizierten Schritte, die ich für gdb auf Mac Mojave verwendet habe (mit Dank an den ursprünglichen Autor, der Anweisungen für High Sierra veröffentlicht hat):

    1. Führen Sie brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/9ec9fb27a33698fc7636afce5c1c16787e9ce3f3/Formula/gdb.rb Aus.
    2. Folgen Sie mit brew pin gdb
    3. Öffnen Sie Schlüsselbund
    4. Öffnen Sie im Menü Schlüsselbundzugriff> Zertifikatsassistent> Zertifikat erstellen
    5. Gib ihm einen Namen (z. B. gdbcert)
    6. Identitätstyp: Self Signed Root
    7. Zertifikatstyp: Codesignatur
    8. Überprüfen Sie: Standardeinstellungen überschreiben lassen
    9. Fahren Sie mit den Standardoptionen fort, bis Geben Sie einen Speicherort für an
    10. Stellen Sie den Schlüsselbundspeicherort auf System ein. Wenn dies zu folgendem Fehler führt: Certificate Error: Unknown Error =-2,147,414,007 Position auf Anmelden setzen, System entsperren, indem Sie auf das Schloss in der oberen linken Ecke klicken und das Zertifikat gdbcert auf Systemschlüsselbund) ziehen und ablegen.
    11. Suchen Sie das Zertifikat in Systemschlüsselbund.
    12. Doppelklicken Sie auf Zertifikat.
    13. Erweitern Sie Trust, setzen Sie Code signing auf Always Trust
    14. Starten Sie taskgated im Terminal neu: Sudo killall taskgated Oder möglicherweise ps aux | grep taskgated Und dann kill -9 <pid>
    15. Aktivieren Sie das Root-Konto, indem Sie die folgenden Schritte ausführen:
    16. Öffnen Sie Systemeinstellungen
    17. Gehen Sie zu Benutzer & Gruppen> Entsperren
    18. Login Options> Join (neben Network Account Server)
    19. Klicken Sie auf Open Directory Utility
    20. Gehen Sie zu Bearbeiten> Root-Benutzer aktivieren
    21. Codesign gdb mit Ihrem Zertifikat: codesign -fs gdbcert /usr/local/bin/gdb Ich habe am Ende Sudo killall taskgated && codesign -fs gdbcert /usr/local/bin/gdb Verwendet
    22. Codesign authentifizieren als root-Benutzer
    23. Fahren Sie Ihren Mac herunter und starten Sie ihn im Wiederherstellungsmodus neu (halten Sie Befehl-R gedrückt, bis Apple Logo erscheint)
    24. Terminalfenster öffnen
    25. Ändern Sie den Systemintegritätsschutz, um das Debuggen zu ermöglichen: csrutil enable --without debug
    26. Starten Sie Ihren Mac neu. Das Debuggen mit gdb sollte nun wie erwartet funktionieren.
    27. Führen Sie gdb mit Sudo aus; zum Beispiel Sudo gdb -q ./a.out
    1
    user33003

    Der Befehl log ist hilfreich bei der Behebung von Code-Signierungsproblemen. Hier ist was ich verwendet habe (auf Mojave):

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

    0
    DomQ