web-dev-qa-db-ja.com

macOS Mojave:デバッグ(gdb)を有効にするためにcodesignを達成する方法は?

10.5以降、macOSのコードサインの問題をカバーする多くのトピックが浮かんでいます。私が達成したかったのは、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

/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、Text Editor、MS Visual Studio-すべて破損-spをファイルに挿入した後)

4)一部のトピックでは、コマンドcsrutil enable --withouth debugがリカバリで使用されている場合にのみデバッグが機能することがわかりました。これは何も変更していません。

最終的に私は:

  • コード署名する証明書
  • 上記のステートメントに従って署名されたgdb実行可能ファイル
  • 文字列-sp属性が設定されていないcom.Apple.taskgated.plistファイル
  • 誰もがこの動作を確認できれば非常に感謝しています、これに対する解決策:)

    18
    codeG

    これはコードサインの資格に関連しています。署名プロセスで「com.Apple.security.cs.debugger」キーを追加する必要があります。

    たとえば、codesign -fs gdbcert /usr/local/bin/gdbcodesign --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>
    
    32
    Sajjad Pourali

    logコマンドは、コード署名の問題のトラブルシューティングに役立ちます。ここに私が使用したものがあります(Mojaveで):

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

    1
    DomQ

    com.Apple.taskgated.plistを変更しなかったので、リストしたテキストエディターのいずれにも問題はありません。ただし、使用している修正プログラムでは、残念ながらgdbSudoで実行する必要があります(High Sierraで行った修正には必要ありませんでした)。 Geanyを使用しませんが、これらはMac Mojaveでgdbに使用したわずかに変更された手順です(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. IDタイプ:Self Signed Root
    7. 証明書の種類:コード署名
    8. チェック:Let Me Override Defaults
    9. の場所を指定するまでデフォルトのオプションを続行します
    10. キーチェーンの場所をシステムに設定します。これにより次のエラーが発生する場合:Certificate Error: Unknown Error =-2,147,414,007ログインする場所を設定し、左上隅のロックをクリックしてシステムのロックを解除し、証明書をドラッグアンドドロップgdbcertしてSystemキーチェーン
    11. System keychainで証明書を見つけます。
    12. 証明書をダブルクリックします。
    13. Trustを展開し、Code signingAlways Trustに設定します
    14. ターミナルでtaskgatedを再起動します:Sudo killall taskgatedまたは場合によってはps aux | grep taskgatedその後kill -9 <pid>
    15. 以下の手順に従ってルートアカウントを有効にします。
    16. 開くシステム環境設定
    17. ユーザーとグループ>ロック解除に移動します
    18. ログインオプション>参加(ネットワークアカウントサーバーの横)
    19. ディレクトリユーティリティを開くをクリックします
    20. Edit> Enable Root Userに移動します
    21. 証明書を使用してgdbを共同設計します:codesign -fs gdbcert /usr/local/bin/gdb最終的にSudo killall taskgated && codesign -fs gdbcert /usr/local/bin/gdbを使用しました
    22. Codesignはrootユーザーとして認証します
    23. Macをシャットダウンし、リカバリモードで再起動します(Appleロゴが表示されるまでcommand-Rを押し続けます)
    24. ターミナルウィンドウを開く
    25. デバッグを許可するようにシステム整合性保護を変更します:csrutil enable --without debug
    26. Macを再起動します。 gdbを使用したデバッグは、期待どおりに機能するようになりました。
    27. gdbSudoを実行します。たとえば、Sudo gdb -q ./a.out
    1
    user33003