programing

"gdb가 코드화되었는지 확인하십시오 - 태스크게이트(8) 참조" - 홈브루 코드가 서명된 gdb를 설치하려면 어떻게 해야 합니까?

subpage 2023. 7. 3. 22:53
반응형

"gdb가 코드화되었는지 확인하십시오 - 태스크게이트(8) 참조" - 홈브루 코드가 서명된 gdb를 설치하려면 어떻게 해야 합니까?

저는 osx 10.8.4를 사용하고 있으며 홈브루와 함께 gdb 7.5.1을 설치했습니다(동기 부여 -with-python 등과 같은 새로운 기능이 있는 새 gdb를 얻습니다...)

c++ 이클립스 프로젝트 내에서 디버그를 실행하면 다음과 같은 정보를 얻을 수 있습니다.

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 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))
Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5).
 (please check gdb is codesigned - see taskgated(8))

나는 코드 서명을 위한 다양한 제안을 따랐습니다.

그래서 저는 했습니다:

  1. 인증서 설정
  2. gdb -> codesign -sgdb-cert /usr/local/bin/gdb에 서명합니다.

Eclipse에서 디버깅을 다시 실행하면 위와 같은 오류가 발생합니다("gdb가 코드화되었는지 확인하십시오. taskgated(8) 참조)."

gdb를 이전 gdb(이클립스의 gdb 환경설정에서) /usr/libexec/gdb/gdb-i386-apple-darwin으로 되돌리면 디버깅이 예상대로 실행됩니다.

해결책/힌트가 있습니까?

고마워

펠레

이 오류는 OSX가 다른 프로세스 pid에 액세스하기 위해 이진에 대한 디지털 서명을 요구하는 pid 액세스 정책을 구현하기 때문에 발생합니다.다른 프로세스에 대한 gdb 액세스를 활성화하려면 먼저 바이너리에 코드 서명해야 합니다.이 서명은 사용자가 작성하고 시스템에 등록해야 하는 특정 인증서에 따라 달라집니다.

코드 서명 인증서를 만들려면 키체인 액세스 응용 프로그램을 엽니다.메뉴 선택 키체인 액세스 -> Certificate Assistant -> Certificate 만들기...

인증서 이름(예: gdb-cert)을 선택하고 ID 유형을 자체 서명 루트로 설정한 다음 인증서 유형을 코드 서명으로 설정하고 기본값을 재정의하도록 허용을 선택합니다.인증서에 대한 위치 지정 화면이 나타날 때까지 계속을 여러 번 클릭한 다음 키체인을 시스템으로 설정합니다.

인증서를 두 번 클릭하고 신뢰 섹션을 열고 코드 서명을 항상 신뢰로 설정합니다.키 체인 액세스 응용 프로그램을 종료합니다.

작업 게이트 서비스를 다시 시작하고 이진에 서명합니다.

$ sudo killall taskgated
$ codesign -fs gdb-cert "$(which gdb)"

출처 http://andresabino.com/2015/04/14/codesign-gdb-on-mac-os-x-yosemite-10-10-2/

macOS 10.12(Sierra) 이상에서는 또한

gdb 7.12.1 이상 사용 gdb가 셸을 사용하여 디버깅할 프로그램을 시작하지 못하도록 합니다.이 내부 gdb에 대해 다음 명령을 사용할 수 있습니다.

set startup-with-shell off

홈 디렉토리에 있는 .gdbinit라는 파일에 이 마지막 명령을 넣을 수도 있습니다. 이 경우 gdb를 시작할 때마다 자동으로 적용됩니다.

echo "set startup-with-shell off" >> ~/.gdbinit

출처: https://sourceware.org/gdb/wiki/BuildingOnDarwin

로 업그레이드했습니다.gdb 8.3그리고 일을 제대로 할 수 없었습니다.이것은 저에게 도움이 되었습니다.

codesign --entitlements gdb.xml -fs gdb-cert /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.allow-jit</key>
    <true/>
    <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
    <true/>
    <key>com.apple.security.cs.allow-dyld-environment-variables</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
    <key>com.apple.security.cs.disable-executable-page-protection</key>
    <true/>
    <key>com.apple.security.cs.debugger</key>
    <true/>
    <key>com.apple.security.get-task-allow</key>
    <true/>
</dict>
</plist>

여기서 이 솔루션을 찾았습니다. https://timnash.co.uk/getting-gdb-to-semi-reliably-work-on-mojave-macos/

참: 사권이한없실수있다니습행할으고면용참▁note 실행할 수 .gdbsudo.

도 GDB와했습니다. GDB는 GDB와 같은 문제를 .나는 아래로 달리고 있습니다.Mac OS X 10.8.5일명 마운틴 라이온GDB 버전을 사용하고 있습니다.7.7.1.

다음 명령을 사용하여 테스트 프로그램을 컴파일했습니다.

g++ -o gdb-sample.out -g gdb-sample.cpp    

gdb sample.out동일한 암호화된 오류 메시지가 표시됩니다.

"Unable to find Mach task port for process-id 46234: (os/kern) failure (0x5). (please check gdb is codesigned - see taskgated(8))"

그러나 이 오류 메시지는 경고 메시지입니다.

제가 찾은 해결책은 superuser acct를 사용하여 GDB를 호출하는 것이었습니다.

sudo gdb sample.out. 

그것은 저에게 잘 맞습니다.

그 때부터 GDB 예제를 실행할 수 있었습니다.스도를 사용하지 않고 외출합니다.

이것이 다른 사람들에게 도움이 되고 효과가 있기를 바랍니다. 그렇지 않다면 RSVP.

나는 이렇게 코드 서명 없이 OSX 10.9에서 gdb를 작동시켰습니다(여기서 설명함).

  1. macports와 함께 gdb를 설치합니다.(아마도 생략할 수 있습니다.

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

    문자열을 " " " " 에서합니다.-s-sp 27.22도 번, 27도 콜.

  3. 컴퓨터를 재부팅합니다.

  4. gdb를 합니다.한 경우 포트를 .ggdb 구성에 별칭을 했습니다.또는 구성 파일에 별칭을 생성했습니다.

alias gdb='ggdb'

그리고 'gdb' 명령을 사용합니다.

이 모든 것이 저에게 효과가 없었고 저는 긴 시간을 달려야 했습니다.다음은 제가 작업을 수행하기 위해 수행한 전체 단계 목록입니다.

  1. gdb에 서명할 인증서를 만듭니다.

불행하게도, 시스템 인증서가 저에게 주었습니다.Unknown Error = -2,147,414,007도움이 많이 돼서 해결책을 찾아야만 했습니다. Keychain Access -> Create certificate ->

고르다login,gdb-cert,Code Signing

시스템 키 체인에 인증서 복사/이동(암호 입력)

  1. 선택(인증선택서(()gdb-cert을 클릭합니다.Get info->Trust Always
  2. 안 함 용startup-with-shell

: 콘에입력:set startup-with-shell off

을 기억합니다.echo "set startup-with-shell off" >>~/.gdbinit

  1. 루트 사용자 사용

에 가다System Preferences->Users & Groups->Unlock it->Login Options->Network Account Server->Join->Unlock it->Edit (으) ->Enable Root User

  1. sudo killall taskgated
  2. 마지막으로 gdb 서명

codesign -fs gdb-cert "$(which gdb)"

  1. 루트 사용자 사용 안 함(4단계)
  2. 그래도 작동하지 않으면 재부팅합니다.(다른 방법이 없다면, 아마도 이미 작동했을 것입니다.)

를 쓰게 . 저는 결국 사용하게 되었습니다.lldb왜냐하면 그것은 그냥 작동하기 때문입니다 (계속)

10및 홈브루를 나 시에라 10.12.6(이하) "홈브루"를 사용할 수 ./usr/local/bin/gdb에 대한 상징적인 링크입니다./usr/local/Cellar/gdb/8.0/bin/gdb(또는 어떤 버전이든 상관없습니다.)8.0.1).

링크와 대상을 모두 코드 설계해야 합니다.

codesign -fs gdb-cert /usr/local/bin/gdb
codesign -fs gdb-cert "/usr/local/Cellar/gdb/8.0/bin/gdb"

또는, 만약 당신이.greadlink(를 통해 설치됨)brew install coreutils):

codesign -fs gdb-cert $(which gdb)
codesign -fs gdb-cert $(greadlink -f $(which gdb))

관련이 없을 수 있습니다.gdb 대신 lldbonmads를 사용할 수 있습니다.당신은 gdb를 설치하기 위해 이런 번거로움이 필요하지 않습니다.

lldb(http://lldb.llvm.org )는 High Sierra에 기본적으로 이미 설치되어 있습니다.

이것이 Big Sur: https://dev.to/jasonelwood/setup-gdb-on-macos-in-2020-489k 에서 저에게 도움이 되었습니다.다른 가이드의 중요한 누락 단계는 코드 설계를 위한 --entitlements gdb-entitlement.xml 옵션이었습니다.

연결된 사이트가 사라질 경우를 대비하여 참조용으로 gdb-entitlement.xml 파일을 복사합니다. codesign --entitlements gdb-entitlement.xml -fs

어디에<gdb-cert>인증서의 이름이며 gdb 실행 파일의 경로입니다.

<!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.allow-jit</key><true/><key>com.apple.security.cs.allow-unsigned-executable-memory</key><true/><key>com.apple.security.cs.allow-dyld-environment-variables</key><true/><key>com.apple.security.cs.disable-library-validation</key><true/><key>com.apple.security.cs.disable-executable-page-protection</key><true/><key>com.apple.security.cs.debugger</key><true/><key>com.apple.security.get-task-allow</key><true/></dict></plist>

저는 여기서 가장 높은 투표를 받은 답변의 세계적인 변화가 의도하지 않은 결과를 가지고 있는지 궁금합니다.

이전 Tiger 규약을 활성화하는 대신 작업 게이트를 통해 서명된 코드를 실행할 수 있습니다.따라서 여기 답변과 유사하게 gdb에 대한 서명된 인증서를 받는 것이 더 나을 수 있습니다.

이 일이 있은 후에 나는 할 수 있었습니다.sudogdb를 사용합니다.만약 당신이 osudo와 함께 gdb를 사용해야 한다면, 아마도링크가 도움이 될 것입니다, 하지만, 면책 사항, 저는 사용하기 때문에 아직 시도하지 않았습니다.sudo현재로서는 괜찮은 해결책입니다.

저는 이 요점을 따르는 것을 추천할 수 있습니다: https://gist.github.com/gravitylow/fb595186ce6068537a6e9da6d8b5b96d#file-codesign_gdb-md

극복할 수 있는 트릭:unknown error = -2,147,414,007여기에 설명된 인증서 생성 중: https://apple.stackexchange.com/a/309123

주의:

다음으로 설치된 gdb의 경로homebrew패키지는 다음과 같아야 합니다./usr/local/Cellar/gdb/9.2/bin/gdb

그리고.csrutil enable --without debug에 대한 메시지가 표시됩니다.requesting unsupported configuration여기처럼: https://totalfinder.binaryage.com/system-integrity-protection

테스트:

○ → sw_vers -productVersion
10.13.6

○ → gdb ./a.out
GNU gdb (GDB) 9.2
...
Thread 3 hit Breakpoint 1, main () at main.c:14
14          data_t d = {0};

gdb 8.3;

내 문제는 위에 있는 사람과 같습니다.

codesign --entitlements gdb.xml -fs gdb-cert /usr/local/bin/gdb

언급URL : https://stackoverflow.com/questions/18423124/please-check-gdb-is-codesigned-see-taskgated8-how-to-get-gdb-installed-w

반응형